逐行读取文件并附加单词

时间:2014-03-19 06:44:58

标签: python

我是python的新手并且尝试逐行读取文件并在每行的末尾添加一个单词。 “打印行”显示所需的单词已被附加,但相同的内容未按要求写回文件。感谢您的帮助。

#!/usr/bin/python
f=open('test1', 'r+')
for line in f:
    line=line.strip("\n")
    line=line +" " + 'test2'
    print line
    f.write(line)
f.close()

4 个答案:

答案 0 :(得分:1)

一般来说,同时读/写文件是一件非常困难的事情。通常,您将从一个文件读取并写入另一个文件(可能在内存中)。内存中的实现类似于:

with open('test1', 'r') as fin:
    lines = [line.strip('\n') + ' test2\n' for line in fin]
with open('test1', 'w') as fout:
    fout.writelines(lines)

请注意,我在第一个with块中将所有文件的数据读入内存。在第二个with块中,我将所有数据写回一个新文件(方便地与旧文件同名,有效地覆盖旧文件)。当然,如果内存有问题,您可以读取一行,然后将一行写入新文件(使用不同的名称)。关闭并刷新两个文件后,可以使用shutil.move重命名新文件,以便覆盖旧文件。

答案 1 :(得分:1)

mgilson的代码略有错误。校正:

with open("test1", "r") as f:
    new_contents = [line.strip() + "test2" for line in f.readlines()]
with open("test1", "w") as f:
    f.write("\n".join(new_contents))

答案 2 :(得分:1)

@mgilson的回答非常好,只有一点点错误,lines末尾的lines = [line.strip('\n') + ' test2\n' for line in lines]应为fin

答案 3 :(得分:1)

mgilson给出的代码很棒!但是,如果您同时阅读和追加,则无法使用您要求的功能。

我对python太新了。 所以,我发现自己在以下语法中更加安慰。

# read in 
f = open('test1', 'r')
newlines = []
for line in f:
    newline = line.strip("\n") + " " + 'test2' + "\n"
    newlines.append(newline)
    print newline,
f.close()
# overwrite the same file
f = open('test1', 'w')
f.writelines(newlines)
f.close()