Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 读一个文件,然后写到我刚读到的那行_Python_Python 2.7_File Io - Fatal编程技术网

Python 读一个文件,然后写到我刚读到的那行

Python 读一个文件,然后写到我刚读到的那行,python,python-2.7,file-io,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()

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

以下是我到目前为止的情况:

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

此代码正在查找正确的行,但正在写入文件末尾。我觉得读写iter应该是共享的,但我想不是:(

你能用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()

使用
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='')
这些行将被替换为
“您希望重新布线的内容”
,并且不会创建新文件

编辑

如果不删除原始换行符或在没有换行符的情况下打印,则会得到额外的空行。

可能重复的内容并不完全相同。我想在不知道整行内容的情况下替换文件中的整行内容。此外,我的文件可能会变得相当大,我不想每次都创建一个新文件并重新填充它e、 你确定你已经看过这一个问题的所有答案了吗?多个正则表达式建议,至少有2个不需要创建新文件。
w+
模式会截断文件,因此在写回之前你不能读取它。你可能想使用
r+
,然后在阅读后,截断你自己(
f.truncate()
)在重写之前。但是
fileinput
可能更容易(也更安全)。
fileinput
当然是一种方法,但我认为你的代码不会正常工作。你需要
打印每一行,而不仅仅是你想更改的那一行。制作
if
语句的主体
line=“随便什么”
,然后始终打印行。