Python:在每行的末尾添加相同的字符串

时间:2017-11-17 20:51:40

标签: python string csv writer

我正在修改一个包含两个字段名的CSV文件,我想在另一个字段名下添加一个字符串到每行的末尾。我已经弄清楚如何添加字段名,但不知道如何添加字段名。看起来它应该很简单,但我很难过。

import csv

with open('test2l.csv', 'r') as inny:
    reader = csv.DictReader(inny)

    with open('outfile.csv', 'w') as outty:
        fieldnames = ["Genus", "Species", "Source"] 
        writer = csv.DictWriter(outty, fieldnames = fieldnames)
        writer.writeheader()

        for record in reader:
             g = record['Genus']
             s = record['Species']

我尝试的所有内容都将字符串添加到'Species'中的现有字符串中,但我无法为'Source'创建记录,我认为因为它是空的。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您还没有,请查看csv.Reader,csv.DictReader和csv.DictWriter的文档。

文档指出reader对象使用迭代器协议对on对象进行操作。迭代一次(对于读者中的行:例如)添加“Source”会耗尽底层迭代器。之后尝试将同一个阅读器与作者一起使用是行不通的。

要解决此问题,您可以创建一个列表:

rows = list(csv.DictReader(inny))

虽然这会耗尽迭代器,但您现在有了一个可以使用的列表。但是,如果列表很长,这可能不太理想。

另一个解决方案是添加Source并在同一次迭代中写入行:

for row in reader:
    row['Source'] = 'same string every time'
    writer.writerow(row)

答案 1 :(得分:0)

简单地写一下:

for record in reader:
    record["Source"] = "whateversource"

在您写入文件的步骤之前这样做。