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=“随便什么”
,然后始终打印行。