删除python中文本文件的某些部分

删除python中文本文件的某些部分,python,Python,我有一个很大的文本文件,我想过滤掉一些行。第一行是标识符,后面跟着许多行(不同行中的数字),如本例所示: 例如: fixedStep ch=GL000219.1 start=52818 step=1 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 fixedStep ch=GL000320.1 start=52959 step=1 1.000000 1.000000 1.000000 fixedStep ch=M st

我有一个很大的文本文件,我想过滤掉一些行。第一行是标识符,后面跟着许多行(不同行中的数字),如本例所示:

例如:

fixedStep ch=GL000219.1 start=52818 step=1
1.000000
1.000000
1.000000
1.000000
1.000000
1.000000
1.000000
fixedStep ch=GL000320.1 start=52959 step=1
1.000000
1.000000
1.000000
fixedStep ch=M start=52959 step=1
1.000000
1.000000
此行是标识符:
fixedStep ch=GL000219.1 start=52818 step=1
我想过滤掉所有包含
ch=GL000219.1
ch=GL000320.1
的标识符行和以下行(数字),并将其他标识符和相应的行(数字)保留在它们下面。每个标识符重复多次。 像这样的输出:

fixedStep ch=M start=52959 step=1
1.000000
1.000000
我尝试过以下代码:

l = ["ch=GL000219.1", "ch=GL000320.1"] # since I have more identifiers that should be removed 

with open('file.txt', 'r') as f:
    with open('outfile.txt', 'w') as outfile:
        good_data = True
        for line in f:
            if line.startswith('fixedStep'):
                for i in l:
                    good_data = i not in line
            if good_data:
                outfile.write(line)
我的代码没有返回我想要的。您知道如何修改代码吗?

从文本文件中读取字符串(文本文件的内容)后,需要将其拆分为行。使用

印刷品(f)

读入f后,您会发现这是一个字符串,而不是行

如果是unix结尾文本文件,请使用

f=f.split(“\n”)


若要将字符串转换为列表,则可以逐行循环。

您将此行放置在错误的位置:

good_data = True
一旦设置为false,它就不再是true

你可以这样写:

l = ["ch=GL000219.1", "ch=GL000320.1"]
flag = False                                                                        

with open('file.txt', 'r') as f, open('outfile.txt', 'w') as outfile:                                                                                
    for line in f:                                                                  
        if line.strip().startswith("fixedStep"):                                    
            flag = all(i not in line for i in l)                                    
        if flag:                                                                    
            outfile.write(line)    

good_data=i not in line
下添加一个
break
,如果它变为
False
<代码>好的\u数据可以为一行获取多个值,因为它正在覆盖自身,因此对于
i
的最后一个值,
好的\u数据
需要为每一行重置,没有?我试过了,但没什么区别。如果我正确理解你的问题,你需要做一些修改。你尝试了什么?如果我不调用列表并逐个尝试标识符,那么每次对其中一个标识符都非常有效,但我花了很多时间尝试所有标识符。我希望一次对所有标识符执行此操作。它会删除标识符下面的每一行,即使是我感兴趣的行in@john你说的“删除每一行”是什么意思,我不明白!每个标识符下面都有一些行(如示例所示)。我想删除一些我不感兴趣的标识符和下面几行。实际上,还有一些我感兴趣的标识符,我想要它们和它们下面的对应行。喜欢example@john我理解。我更新了密码,这是你想要的吗?