gpt4 book ai didi

csv - 将子进程的输出转换为 csv.reader 对象

转载 作者:行者123 更新时间:2023-12-02 08:26:48 25 4
gpt4 key购买 nike

有没有办法从 subprocess 获取输出并将其转换为可迭代的 csv.reader 或 csv.DictReader 对象?这是我一直在尝试的代码:

p2 = subprocess.Popen("sort command...", stdout=subprocess.PIPE)
output = p2.communicate()[0]
edits = csv.reader(output, delimiter="\t")

基本上,我正在对一个大的 CSV 文件进行排序,然后我想将它作为 csv.reader 对象放入 Python 中。

我得到的错误是

Error: iterator should return strings, not int (did you open the file in text mode?)



有没有办法将此字节流视为 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)

如果 /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']

关于csv - 将子进程的输出转换为 csv.reader 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com