从文本fi中删除特定行

2024-09-19 19:23:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件:

>E8|E2|E9D
Football is a good game
Its good for health
you can play it every day
>E8|E2|E10D
Sequence unavailable
>E8|E2|EKB
Cricket
>E87|E77|E10D
Sequence unavailable
>E27|E97|E10D
Sequence unavailable
>E8|E2|E9D
Sequence unavailable

我编写了以下代码从该文件中检测Sequence unavailable,并将其删除:

^{pr2}$

但我真正想要的是删除给定问题的所有可用序列(第>行的最后一列)。在

例如,即使E9D后面有行,如果E9D有另一个带有{}的条目,则不应将任何条目写入输出文件:

在输入.txt在

>E8|E2|E9D
Football is a good game
Its good for health
you can play it every day
>E8|E2|E10D
Sequence unavailable
>E8|E2|EKB
Cricket
>E87|E77|E10D
Sequence unavailable
>E27|E97|E10D
Sequence unavailable
>E8|E2|E9D
Sequence unavailable

在输出.txt在

>E8|E2|EKB
Cricket

这里只有EKB问题有条目。在


Tags: gameforis条目itsgoodsequencefootball
2条回答
def get_name(line):
    return line[1:].rsplit('|', 1)[-1].strip()

with open('input.txt') as f, open('output.txt', 'w') as fout:
    name = ''

    # Phase 1: Find unavailable sequence
    unavailable = set()
    for line in f:
        if line.startswith('>'):
            name = get_name(line)
        else:
            if 'Sequence unavailable' in line:
                unavailable.add(name)

    # Phase 2: Filter avilable sequence
    f.seek(0)
    keep = False
    for line in f:
        if line.startswith('>'):
            name = get_name(line)
            keep = name not in unavailable
        if keep:
            fout.write(line)

你可以采用另一种更简单的方法。您可以将其替换为“”而不是删除该行

import fileinput
import sys

f=open('input.txt')
line = f.readline()
f.close()
words = line.split()
for word in words:
    line = line.replace("Sequence unavailable","")
    line = line.replace("\n","")

我没有执行这段代码,但我认为逻辑是正确的。请注意,您必须使用第二次更换,因为每次都会有新的生产线。在

相关问题 更多 >