读取文件并写入我刚读过的行

时间:2014-04-04 23:52:11

标签: python python-2.7 file-io

所以我想通读一个文件检查每一行,看看它是否包含我正在寻找的字符串的一部分。一旦找到正确的行,我就想在文件中重写该行。

这是我到目前为止所做的:

f = open("playlist.py", "r+")
for line in f:
    if old in line:
        f.write("    " + str(item) + ":" + " " + 
                "\""  + new_text + "\"") 
        f.close()
        break
f.close()

此代码找到正确的行但写入文件的末尾。我有点想读和写iters会被分享,但我猜不是:(

2 个答案:

答案 0 :(得分:1)

使用fileinput

import fileinput

for line in fileinput.input("test.txt", inplace=True):
    if contains_str_youlookingfor:  
        print "what_you_want_to_rewire"
    else:
        print line.rstrip()
fileinput.close()

如果您使用的是Python 3.2+,则首选上下文管理器:

with fileinput.input("test.txt", inplace=True) as f:    
    for line in f:
        if contains_str_youlookingfor:  
            print("what_you_want_to_rewire")
        else:
            print(line, end='')

这些行将被"what_you_want_to_rewire"替换,并且不会创建新文件。

修改
如果您没有删除原始换行符或没有换行符打印,那么您将获得额外的空行。

答案 1 :(得分:0)

你可以用r +模式打开文件然后将内容读入列表并替换包含你想要的数据的行(列表项)然后将整个文件写回仍然打开的文件?像这样的东西

f=open(filename, 'r+')
data=f.readlines()
for line in data:
    if old in line:
        line="    " + str(item) + ":" + " " + 
            "\""  + new_text + "\""
f.truncate()
f.writelines(data)
f.close()