2014-03-19 133 views
1

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

回答

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重命名新文件,以便覆盖旧文件。

+0

非常感谢您的支持团队 – user3436288

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)) 
+0

啊是的。我说'线',我的意思是'鳍'。傻我。一般来说,直接迭代文件对象肯定比'f.readlines()'好。此外,你的答案忘记追加新行。也许是''\ n'.join(...)'? – mgilson

+0

readlines()读取'\ n's,如果额外的字符串被附加在前面,那很好。然而,将它附加在后面将它附加到'\ n'后面,导致'original \ nextra'。似乎解决方法是先按照你的建议去除'\ n'和\ n'.join。 – tys

1

@mgilson的答案是非常好,只是一个小错误是在lines = [line.strip('\n') + ' test2\n' for line in lines]到底lines应该fin

+0

谢谢,我纠正了。将来,请将其作为我对答案的评论发布。我会收到通知,以便我知道我需要尽快解决它。 – mgilson

+0

我想首先在您的回答中添加评论,但我没有足够的声望来做到这一点。 – zbtong

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()