我想更改大型CSV文件并将结果写入新文件。
我的python脚本run.py
:
import csv
writer = csv.writer(open(..., 'w'))
for l in csv.reader(open(...)):
l[0] = 'foo' if l[1] else 'bar'
writer.writerow(l)
我意识到更适合我使用Linux pipe
编写文件:
run.py > new-csv-file.csv
我写过:
import csv
import io
s = io.StringIO()
writer = csv.writer(s)
for l in csv.reader(open(...)):
l[0] = 'foo' if l[1] else 'bar'
writer.writerow(l)
print(s.getvalue())
这是错误的代码。每个周期在s
中添加新行,并在每个周期打印整个文件内容,而不是逐行打印。
如何在每个周期清除s
?
或者我如何逐行渲染csv-string?
for l in csv.reader(open(...)):
l[0] = 'foo' if l[1] else 'bar'
s = my_imaginary_csv_render(l)
print(s)
答案 0 :(得分:1)
据我了解你更正,你想要你的代码, 而不是文件打印到标准输出? 在这里解决方案:
import csv
for l in csv.reader(open(...)):
l[0] = 'foo' if l[1] else 'bar'
print(", ".join(l))
如果数据字段包含行分隔符,则此解决方案无法正常工作 然后不要复制csv逻辑以转义csv中的特殊符号,你可以使用:
csv.writer(sys.stdout)