pysftp 读取 csv 文件有一个 etra 引用

Posted

技术标签:

【中文标题】pysftp 读取 csv 文件有一个 etra 引用【英文标题】:pysftp read csv file has an etra quote 【发布时间】:2021-10-15 21:54:04 【问题描述】:

我正在尝试将一个 csv 文件读入一个数组,但是当我读到它时,我得到的是这个额外的引号而不是一行值。

    with pysftp.Connection(host, username=username, password=pwd) as sftp:
        with sftp.cd('/DailyFiles'):
            files = sftp.listdir()
            for f in files:
                if f.startswith('POS_ROBO_'):
                    with sftp.open(f, 'r') as fl:
                    # csv_file = sftp.open(f)
                    # csvreal = pd.read_csv(csv_file)

                    # Data from SSH is binary, we need to decode to string
                        content = [line for line in fl]
                        break

这是content 的样子:

['"Date","AccountVendor","AccountNumber","AccountType","BalanceType","SecurityType","SecuritySubType","ShortClass","LongClass","Symbol","CUSIP","Description","QTY","Price","Amount"\r\n', '"2021-07-01","???TD","942735452","1","SE","C","","Frgn Stk","Foreign Stock","SPDW","TD:17:","SPDR INDEX SHARES FUNDS PORTFO LIO DEVLPD ETF","11.00","36.91","406.01"\r\n']

【问题讨论】:

请注意,我不想为此使用 pandas 看起来你有两行数据,一个标题和值。您希望标头成为数组的一部分还是只是数据的一部分? 我还希望标题成为数据的一部分。谢谢! 【参考方案1】:

这只是一个两行的标准 CSV 文件。 Python 使用外部 ' 字符来表示字符串,而内部 " 是数据的一部分。它们是 CSV 文件引用单个单元格的标准方式,以便单元格中的逗号不会与用作单元格分隔符的逗号混淆。您可以使用csv 转换为数组

import csv

content = [
    '"Date","AccountVendor","AccountNumber","AccountType","BalanceType","SecurityType","SecuritySubType","ShortClass","LongClass","Symbol","CUSIP","Description","QTY","Price","Amount"\r\n',
    '"2021-07-01","???TD","942735452","1","SE","C","","Frgn Stk","Foreign Stock","SPDW","TD:17:","SPDR INDEX SHARES FUNDS PORTFO LIO DEVLPD ETF","11.00","36.91","406.01"\r\n']

array = csv.reader(content)

for row in array:
    print(row)

结果

['Date', 'AccountVendor', 'AccountNumber', 'AccountType', 'BalanceType', 'SecurityType', 'SecuritySubType', 'ShortClass', 'LongClass', 'Symbol', 'CUSIP', 'Description', 'QTY', 'Price', 'Amount']
['2021-07-01', '???TD', '942735452', '1', 'SE', 'C', '', 'Frgn Stk', 'Foreign Stock', 'SPDW', 'TD:17:', 'SPDR INDEX SHARES FUNDS PORTFO LIO DEVLPD ETF', '11.00', '36.91', '406.01']

【讨论】:

使用“csv reader”有什么问题?如果您想读取 CSV 文件,则需要它。像csv.reader(fl) 一样使用它。您的问题与 pysftp 无关。如果您以相同的方式读取本地文件,您会得到相同的结果。 我没有投反对票,所以不确定。你不想使用csv.reader?那么这肯定不是答案! 我在没有 ftp 代码的情况下编写了这个答案以保持其通用性。我也可以完全跳过构建content 并执行array = list(csv.reader(fl))

以上是关于pysftp 读取 csv 文件有一个 etra 引用的主要内容,如果未能解决你的问题,请参考以下文章

pysftp vs. Paramiko

python 读取多个csv文件中某一列,并生成一个新csv文件

如何使用 ssh-ed25519 作为 pysftp 的密钥来设置主机密钥文件

尽管文件已上传,但 Python pysftp.put 引发“没有此类文件”异常

pysftp 忽略禁用的主机密钥检查

怎样从matlab中读取csv文件