0

澄清:所以如果我的文件有 10 行:第一行是标题,所以我想在第一行的末尾附加一些文本

然后我有一个包含 9 个元素的列表..

我想阅读该列表并在每行的末尾附加相应的元素..

所以基本上 list[0] 到第二行, list[1] 到第三行等等..


我有一个用逗号分隔的文件。像这样的东西:

A,B,C
0.123,222,942
......

现在我想做这样的事情:

A,B,C,D #append "D" just once
0.123,222,942,99293
............   

这个“D”实际上保存在一个列表中,所以是的,我有这个“D”,我该怎么做?我的意思是我知道天真的方式。就像遍历每一行并做类似的事情

string += str(list[i])

基本上我如何以pythonic方式在文件末尾附加一些东西:)

4

2 回答 2

4

只需创建一个新文件:

data = ['header', 1, 2, 3, 4]

with open("infile", 'r') as inf, open("infile.2", 'w') as outf:
    outf.writelines('%s,%s\n' % (s.strip(), n) for s, n in zip(inf, data))

如果要“更新”输入文件,只需在之后重命名新文件

import os
os.unlink("infile")
os.rename("infile.2", "infile")
于 2012-04-20T17:46:34.680 回答
2

简短回答:使用csv模块

长答案:

import csv

newvalues = [...]

with open("path/to/input.csv") as file:
    data = list(csv.reader(file))

with open("path/to/input.csv", "w") as file:
    writer = csv.writer(file)
    for row, newvalue in zip(data, newvalues):
        row.append(newvalue)
        writer.writerow(row)

当然,这取决于文件中的行并且newvalues长度相同。如果不是这种情况,您可以使用诸如zip_longest用给定值填充多余行之类的方法。

如果您对不同的文件执行此操作,我们可以更轻松地执行此操作:

import csv

newvalues = [...]

with open("path/to/input.csv") as from, open("path/to/output.csv", "w") as to:
    reader = csv.reader(from)
    writer = csv.writer(to)
    for row, newvalue in zip(reader, newvalues):
        row.append(newvalue)
        writer.writerow(row)

这还有一个好处是不会将整个文件读入内存,所以对于非常大的文件,这是一个更好的解决方案。

于 2012-04-20T17:48:40.263 回答