无需编写文件即可逐行渲染csv数据

时间:2015-10-29 09:31:16

标签: python csv

我想更改大型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)

1 个答案:

答案 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)