我有一个这样的fasta文件: myfasta.fasta
>1_CDS
AAAAATTTCTGGGCCCCGGGGG
AAATTATTA
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
我有一个代码,我想根据其ID具有匹配模式(例如“ CDS”,“ tRNA”等)的序列来分离序列。在下面的代码中,我试图使用startswith并在行中匹配模式,但不匹配。似乎行得通。有人可以帮我如何在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())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句