繁体   English   中英

Python:从文件中删除某些行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM