在文件python的末尾添加字符串

时间:2012-04-20 17:33:24

标签: python

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

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

我想读取该列表,并在每行的末尾添加相应的元素..

所以基本上将[0]列表到第二行,列出[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方式在文件的末尾添加一些内容:)

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分:2)

简答:使用the csv module

答案很长:

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)

这样做的好处是不会将整个文件读入内存,因此对于非常大的文件,这是一个更好的解决方案。