您可以读取和写入两个不同的文件并按元素执行操作。
然后用输出文件替换输入文件
import shutil
valid_List = ["10.1.2.3", "10.2.3.4", "10.2.4.5", "10.2.3.7"]
filename = "abc.txt"
outfile = "outfile.txt"
with open(filename, "r") as f:
with open(outfile, "w") as o:
for line in f:
if all([line != "%s ok\n" % i for i in valid_List]):
o.write(line)
else:
print("%s Deleted" % line.strip())
shutil.move(outfile, filename)
Caveat这使用固定的文件名进行输出,当您并行运行程序多次时可能会导致冲突。如果你使用这个原子保存配方 https://stackoverflow.com/a/29491523/636626你可以将代码简化为
valid_List = ["10.1.2.3", "10.2.3.4", "10.2.4.5", "10.2.3.7"]
filename = "abc.txt"
with atomic_open(filename, "w") as o:
with open(filename, "r") as f:
for line in f:
if all([line != "%s ok\n" % i for i in valid_List]):
o.write(line)
else:
print("%s Deleted" % line.strip())
这将自动为您选择一个临时文件(无冲突),并在完成后用输出文件替换输入文件。
此外,您还会注意到我已经替换了您的外循环(为中的每个条目打开文件一次)valid_list
) 与all()
陈述。这也可以为您节省大量开销。