Jer*_*emy 5 csv subprocess python-3.x
有没有办法获取子进程的输出并将其转换为可迭代的 csv.reader 或 csv.DictReader 对象?这是我一直在尝试的代码:
p2 = subprocess.Popen("sort command...", stdout=subprocess.PIPE)
output = p2.communicate()[0]
edits = csv.reader(output, delimiter="\t")
Run Code Online (Sandbox Code Playgroud)
基本上,我正在对一个大型 CSV 文件进行排序,然后我想将其作为 csv.reader 对象放入 Python 中。
我收到的错误是
错误:迭代器应该返回字符串,而不是整数(您是否以文本模式打开文件?)
有没有办法将此字节流视为 csv.reader 对象,或者我是否以错误的方式思考问题?
这是Python 3中的问题。CSV模块需要unicode输入,而不是字节字符串。除此之外,csv.reader()还需要一个可迭代的对象,例如打开的文件或字符串列表。尝试这个:
encoding = 'ascii' # specify the encoding of the CSV data
p2 = subprocess.Popen(['sort', '/tmp/data.csv'], stdout=subprocess.PIPE)
output = p2.communicate()[0].decode(encoding)
edits = csv.reader(output.splitlines(), delimiter=",")
for row in edits:
print(row)
Run Code Online (Sandbox Code Playgroud)
如果/tmp/data.csv包含(我使用逗号作为分隔符):
1,2,3,4 9,10,11,12 A B C D 5,6,7,8
那么输出将是:
[‘1’、‘2’、‘3’、‘4’] ['5'、'6'、'7'、'8'] ['9'、'10'、'11'、'12'] ['A B C D']
| 归档时间: |
|
| 查看次数: |
5276 次 |
| 最近记录: |