使用带有readline的CSV模块()

时间:2011-08-25 15:12:30

标签: python csv readline

昨天我发布了以下链接: Python CSV Module read and write simultaneously

有些人建议我“如果文件b不是非常大,我建议使用readlines()来获取所有行的列表,然后遍历列表并根据需要更改行。”

我希望仍然可以使用CSV模块的功能,但要做他们建议的内容。我是python的新手,但我仍然不知道该如何做到这一点。

有人可以请我提供一个如何做到这一点的例子。

1 个答案:

答案 0 :(得分:0)

下面是一个使用DictReader读取CSV文件并使用DictWriter写入stdout的示例。该文件有一个名为PERCENT_CORRECT_FLAG的列,这会修改CSV文件以将此字段设置为0.

#!/usr/bin/env python
from __future__ import with_statement
from __future__ import print_function

from csv import DictReader, DictWriter
import sys

def modify_csv(filename):
    with open(filename) as f:
        reader = DictReader(f)
        writer = DictWriter(sys.stdout, fieldnames=reader.fieldnames)
        for i, s in enumerate(writer.fieldnames):
            print(i, s, file=sys.stdout)
        for row in reader:
            row['PERCENT_CORRECT_FLAG'] = '0'
            writer.writerow(row)

if __name__ == '__main__':
    for filename in sys.argv[1:]:
        modify_csv(filename)

如果您不想写入stdout,可以打开另一个文件进行写入并使用它。请注意,如果要回写原始文件,则必须:

  1. 在打开写入或

  2. 之前,将文件读入内存并关闭文件
  3. 打开一个具有不同名称的文件进行写入,并在关闭后重命名。