我是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()
答案 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()