我编写了python代码以在tcl文件中搜索模式并将其替换为字符串,它会打印输出,但不会将其保存在tcl文件中
import re
import fileinput
filename=open("Fdrc.tcl","r+")
for i in filename:
if i.find("set qa_label")!=-1:
print(i)
a=re.sub(r'REL.*','harsh',i)
print(a)
filename.close()
实际结果
设置qa_label
REL_ts07n0g42p22sadsl01msaA04_2018-09-11-11-01将qa_label设置为苛刻
预期结果是在我的文件中它应该反映与上述相同的结果,但事实并非如此
答案 0 :(得分:0)
如果要查看更改在磁盘上的影响,则需要将更改实际写回到磁盘上。就像@ImperishableNight所说的那样,您不想通过尝试写入要从中读取文件的方式来执行此操作...您要写入新文件。这是执行此操作的代码的扩展版本:
import re
import fileinput
fin=open("/tmp/Fdrc.tcl")
fout=open("/tmp/FdrcNew.tcl", "w")
for i in fin:
if i.find("set qa_label")!=-1:
print(i)
a=re.sub(r'REL.*','harsh',i)
print(a)
fout.write(a)
else:
fout.write(i)
fin.close()
fout.close()
输入和输出文件内容:
> cat /tmp/Fdrc.tcl
set qa_label REL_ts07n0g42p22sadsl01msaA04_2018-09-11-11-01
> cat /tmp/FdrcNew.tcl
set qa_label harsh
如果要覆盖原始文件,则需要将整个文件读入内存并关闭输入文件流,然后再次打开该文件进行写入,并将修改后的内容写入同一文件。
这是代码的更清洁版本,可以执行此操作...生成内存中的结果,然后使用新的文件句柄将其写出。我仍在此处写入其他文件,因为通常至少在测试代码时,这就是您要执行的操作。您可以简单地更改第二个文件的名称以使其与第一个文件匹配,此代码将使用修改后的内容覆盖原始文件:
import re
lines = []
with open("/tmp/Fdrc.tcl") as fin:
for i in fin:
if i.find("set qa_label")!=-1:
print(i)
i=re.sub(r'REL.*','harsh',i)
print(i)
lines.append(i)
with open("/tmp/FdrcNew.tcl", "w") as fout:
fout.writelines(lines)
答案 1 :(得分:0)
打开一个用于写入更新的文件内容的临时文件,然后打开该文件以进行写入。
修改这些行之后,将其写回到文件中。
import re
import fileinput
from tempfile import TemporaryFile
with TemporaryFile() as t:
with open("Fdrc.tcl", "r") as file_reader:
for line in file_reader:
if line.find("set qa_label") != -1:
t.write(
str.encode(
re.sub(r'REL.*', 'harsh', str(line))
)
)
else:
t.write(str.encode(line))
t.seek(0)
with open("Fdrc.tcl", "wb") as file_writer:
file_writer.writelines(t)