我有一个文本文件foo.txt,如下所示:
first 01
start
some thing 01
and more 101
i dont care
end
i dont care
final 01
我想在行 开始 和 之间替换所有 01 10 结束 在同一个foo.txt中,如下所示:
first 01
start
some thing 10
and more 110
i dont care
end
i dont care
final 01
到目前为止我的代码看起来像是:
import re
from tempfile import mkstemp
from shutil import move
from os import remove, close
def replace(foo.txt):
searchStart = re.compile("^start")
searchEnd = re.compile("^end")
pattern = "01"
subst = "10"
fh, abs_path = mkstemp()
search = 0
with open(abs_path,'w') as new_file:
with open(file_path) as old_file:
for line in old_file:
if searchEnd.search(line):
search = 0
elif searchStart.search(line):
search = 1
if search == 1:
new_file.write(re.sub(pattern,subst,line))
else:
new_file.write(line)
close(fh)
remove(foo.txt)
move(abs_path, foo.txt)
它做我想要的但我想知道是否有任何其他有效的方法来编写代码。我来自嵌入式背景,所以我在我的代码中使用 flag ,例如 search 。
谢谢!
答案 0 :(得分:0)
我不太确定您想要逐行读取和写入文件的用例,但我只是将文件读入字符串变量然后替换所有出现的&而不是您的方法。 #39; 01'用' 10'。你的代码看起来像这样。
with open('testPy.txt', "r+") as f:
data = f.read().replace('01', '10')
f.seek(0)
f.write(data)
seek(0)函数将文件偏移量设置为文件的开头。因此,从这一点开始写入将覆盖整个文件。