我有一个像这样的 fasta 文件:myfasta.fasta
>1_CDS
AAAAATTTCTGGGCCCCGGGGG
AAATTATTA
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
我有一个代码,我想用它来根据具有匹配模式(如“CDS”、“tRNA”等)的 id 来分隔序列。在下面的代码中,我尝试使用startswith 并匹配不匹配的模式t 似乎工作。有人可以帮助我如何在 python 中查找两个条件。
代码:
python mycode.py myfasta.fasta
#!/usr/bin/env python
import sys
import os
myfasta = sys.argv[1]
fasta = open(myfasta)
for line in fasta:
if line.startswith('>') and 'CDS' in line:
print(line)
else:
print(line)
预期输出(如果我使用
CDS
):>1_CDS
AAAAATTTCTGGGCCCCGGGGG
AAATTATTA
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
最佳答案
这是一个适合您的代码。如果一行有 CDS,它会打印该行和下一行。 strip()
在打印行时删除行尾字符。
#!/usr/bin/env python
import sys
import os
myfasta = sys.argv[1]
flag = False
with open(myfasta) as fasta:
for line in fasta:
if line.startswith('>') and 'CDS' in line:
flag = True
elif line.startswith('>'):
flag = False
if flag:
print(line.strip())
编辑 :您可以将 elif 部分删除为以下代码:
#!/usr/bin/env python
import sys
import os
myfasta = sys.argv[1]
flag = False
with open(myfasta) as fasta:
for line in fasta:
if line.startswith('>'):
flag = 'CDS' in line
if flag:
print(line.strip())
关于python - 使用条件匹配一行中的多个模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55386592/