如何在两个模式之间删除或执行文本操作

时间:2017-10-31 13:38:25

标签: python python-3.x

我想删除不符合多个条件的文本行。这就是例子:

  

“>”nxp:NX_A0A075B6H9-1 \ DbUniqueId = NX_A0A075B6H9-1   \ PName =免疫球蛋白λ变量4-69异构体Iso 1   \ GName = IGLV4-69 \ NcbiTaxId = 9606 \ TaxName = Homo Sapiens \ Length = 119   \ SV = 1 \ EV = 19 \ PE = 1 \ ModRes =(42 ||二硫化物)   MAWTPLLFLTLLLHCTGSLSQLVLTQSPSASASLGASVKLTCTLSSGHSSYAIAWHQQQP   EKGPRYLMKLNSDGSHSKGDGIPDRFSGSSSGAERYLTISSLQSEDEADYYCQTWGTGI

     

“>”nxp:NX_A0A075B6I0-1 \ DbUniqueId = NX_A0A075B6I0-1   \ PName =免疫球蛋白λ变量8-61同种型Iso 1   \ GName = IGLV8-61 \ NcbiTaxId = 9606 \ TaxName = Homo Sapiens \ Length = 122   \ SV = 7 \ EV = 27 \ PE = 2 \ ModRes =(46 ||二硫化物)   MSVPTMAWMMLLLGLLAYGSGVDSQTVVTQEPSFSVSPGGTVTLTCGLSSGSVSTSYYPS   WYQQTPGQAPRTLIYSTNTRSSGVPDRFSGSILGNKAALTITGAQADDESDYYCVLYMGS GI

     

“>”nxp:NX_A0A075B6I1-1 \ DbUniqueId = NX_A0A075B6I1-1   \ PName =免疫球蛋白λ变量4-60异构体Iso 1   \ GName = IGLV4-60 \ NcbiTaxId = 9606 \ TaxName = Homo Sapiens \ Length = 120   \ SV = 1 \ EV = 20 \ PE = 1 \ ModRes =(43 ||二硫化物)   MAWTPLLLLFPLLLHCTGSLSQPVLTQSSSASASLGSSVKLTCTLSSGHSSYIIAWHQQQ   PGKAPRYLMKLEGSGSYNKGSGVPDRFSGSSSGADRYLTISNLQFEDEADYYCETWDSNT

我只想要满足条件PE = 2,PE = 5或PE = 4

的行

我尝试使用此代码执行此操作:

    list= []
for line in open("nextprot_all.fasta","r"):
    if line.startswith(">") and "PE=2" or "PE=4" or "PE=5" in line: 
            list.append(line)

with open('test_1.txt', 'w') as output:
    for i in list:
        output.write(i)

问题是,使用这段代码我只是在新文件中输入第一行而不是文本的其余部分。

有没有办法在两个“>”之间捕捉文字当条件为真时?

我想要的结果是:

  

“>”nxp:NX_A0A075B6I0-1 \ DbUniqueId = NX_A0A075B6I0-1   \ PName =免疫球蛋白λ变量8-61同种型Iso 1   \ GName = IGLV8-61 \ NcbiTaxId = 9606 \ TaxName = Homo Sapiens \ Length = 122   \ SV = 7 \ EV = 27 \ PE = 2 \ ModRes =(46 ||二硫化物)   MSVPTMAWMMLLLGLLAYGSGVDSQTVVTQEPSFSVSPGGTVTLTCGLSSGSVSTSYYPS   WYQQTPGQAPRTLIYSTNTRSSGVPDRFSGSILGNKAALTITGAQADDESDYYCVLYMGS GI

提前谢谢

程序已修复。我的问题不是有条件的。我的问题不是关于条件,而是关于我如何迭代以下几行。

list= []
First=False
with open("nextprot_all.peff", 'r') as infile:
    for line in infile:
        if line.startswith(">"):
            if line.find("\PE=2") !=-1 or line.find("\PE=3") !=-1 or line.find("\PE=5") !=-1:
                First=True
            else:
                First=False

        if First:
            list.append(line)

with open('test_2.txt', 'w') as output:
    for i in list:
        output.write(i)

0 个答案:

没有答案