Adding/appending csv 文件列中的附加信息

Adding/appending additional information in a column for a csv file

编辑:

我需要在 csv 文件的特定列中 store/add/append 附加信息而不使用 csv.DictReader

如果我想跳过某列中的一行并且它是空的,我需要做什么?

例如:

示例 csv 文件:

$ cat file.csv
"A","B","C","D","E"
"a1","b1","c1","d1","e1"
"a2","b2","c2","d2","e2"
"a2","b2","c2",,"e2"

代码:

sample = ['dx;dy']
with(openfile.csv, "r") as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    headers = next(reader)
    for row in reader:
        #sample.append(to the column D)

输出应如下所示:

$ cat file.csv
    "A","B","C","D","E"
    "a1","b1","c1","d1;dx;dy","e1"
    "a2","b2","c2","d2;dx;dy","e2"
    "a2","b2","c2",,"e2"

既然知道要追加的列的header,就可以在headers行找到它的索引,然后修改那个元素 每个 row.

append_to_column = 'D'
separator = ';'
sample = ['dx;dy']
with open('file.csv', "r") as csvfile, open("outfile.csv", "w") as outfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    headers = next(reader)
    writer = csv.writer(outfile, delimiter=',', quotechar='"')
    col_index = headers.index(append_to_column)
    for row in reader:
        value = row[col_index]
        new_value = value + separator + sample[0]
        row[col_index] = new_value
        writer.writerow(row)

给出:

A,B,C,D,E
a1,b1,c1,d1;dx;dy,e1
a2,b2,c2,d2;dx;dy,e2

请注意,此文件没有引号,因为它们不是必需的,因为字段不包含任何逗号。如果你想强制 csv.writer 写入引号,你可以将 quoting=csv.QUOTE_ALL 参数添加到 csv.writer() 调用中,如下所示: writer = csv.writer(outfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL) 然后,你会得到:

"A","B","C","D","E"
"a1","b1","c1","d1;dx;dy","e1"
"a2","b2","c2","d2;dx;dy","e2"