[英]Python : Delete certain lines from a file
我正在制作一个程序,可以从现有文件中删除某些行。 它以file1作为entry(f1),查找某种模式,如果找到它,则修改该行(以使其与其他文件兼容)并将此修改保存在变量“ mark”中。 它打开另一个文件f2,并在其中搜索“标记”。 如果它在f2的某行中找到“标记”,则必须删除该行以及其后的三行。 问题是,当我运行它时,程序将从f2中删除所有内容,因此我得到一个空文件。
new=''
pattern2 = '2:N:0:8'
i=0
f1=open('test_reverse.txt','r')
for line in f1:
if pattern2 in line:
mark=line.replace('2:N:0:8','1:N:0:8')
f2=open('test_OKforward2.txt','r')
lines=f2.readlines()
for i, line in enumerate(lines):
if mark in lines[i]:
e=lines[i]
e1=lines[i+1]
e2=lines[i+2]
e3=lines[i+3]
new=e+e1+e2+e3
f3=open('test_OKforward2.txt','w')
if line!=new:
f3.write(line)
我也尝试了next()函数,但是得到了相同的结果,并且出现了“停止迭代”错误。
问题是,当我运行它时,程序将从f2中删除所有内容,因此我得到一个空文件。
每当您打开文件进行写入时,其中的所有内容都会丢失。 您必须重新编写希望保留在文件中的所有内容,并首先排除要删除的内容。
请注意以下几行:
f2=open('test_OKforward2.txt','r')
# ...
f3=open('test_OKforward2.txt','w')
问题是f3
正在打开与f2
相同的文件,以便在文件f2
的行中的每个循环中进行写入。
基本上,添加行之后,您可以重新打开文件进行写入,从而消除了以前的操作。
首先:您应该从循环f2
每一行中的循环中删除f3=open
(即,在循环之外的其他位置执行此操作)。 这是主要问题。
第二:改为使用一个临时文件进行处理,最后将临时文件重命名为您拥有的文件。
第三:您没有关闭文件。 考虑使用上下文管理器。 您的代码看起来像这样:
with open('something.txt') as f2:
# do something with f2;
# f2 with be automatically closed when it exits the ctx manager
第四:遵循PEP-8样式标准来编写代码。 每个阅读您的代码的人都会感谢您。
我遇到了“停止迭代”错误。
这很正常; 您说您正在使用next()
函数。 迭代器和next()
引发StopIteration
,以表示它们无法从要迭代的集合中产生更多元素,并且此迭代过程应停止。
引用文档 :
exception StopIteration
由内置函数
next()
和迭代器的__next__()
方法引发,以__next__()
该迭代器不再产生其他项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.