在Python/Biopython中,我试图获得一个与字符串"Human“匹配的蛋白质序列的枚举列表。下面的代码的问题是,我得到要解析的序列的枚举,而不是那些通过if循环过滤器的序列。
具有正确语法的编辑代码:
from Bio import SeqIO
import sys
sys.stdout = open("out_file.txt","w")
for index, seq_record in enumerate(SeqIO.parse("in_file.txt", "fasta")):
if "Human adenovirus" in seq_record.description:
print "%i]" % index, str(seq_record.description)
print str(seq_record.seq) + "\n"这是输入文件的一部分:
>gi|927348286|gb|ALE15299.1| penton [Bottlenose dolphin adenovirus 1]
MQRPQQTPPPPYESVVEPLYVPSRYLAPSEGRNSIRYSQLPPLYD
>gi|15485528|emb|CAC67483.1| penton [Human adenovirus 2]
MQRAAMYEEGPPPSYESVVSAAPVAAALGSPFDAPLDPPFVPPRYLRPTGGRNSIRYSELAPLFDTTRVY
LVDNKSTDVASLNYQNDHSNFLTTVIQNNDY
>gi|1194445857|dbj|BAX56610.1| fiber, partial [Human mastadenovirus C]
FNPVYPYDTETGPPTVPFLTPPFVSPNG我得到的输出文件如下所示:
2] gi|15485528|emb|CAC67483.1| penton [Human adenovirus 2]
MQRAAMYEEGPPPSYESVVSAAPVAAALGSPFDAPLDPPFVPPRYLRPTGGRNSIRYSELAPLFDTTRVY
LVDNKSTDVASLNYQNDHSNFLTTVIQNNDY我希望通过筛选器的第一个序列获得从1开始的枚举,而不是前面所示的2]。我知道我需要在if循环之后添加一个计数器,但是我尝试了很多替代方法,但是我没有得到想要的输出。这应该不难,我知道如何在Perl中实现,但不知道如何使用Python/Biopython。
发布于 2017-08-31 15:29:53
问题是,如果描述包含"Human“,则只需要增加索引,但要枚举所有内容。
如果我们修改代码示例以仅在找到匹配时增加索引,则会得到以下结果:
from Bio import SeqIO
index = 0
with open("out_file.txt","w") as f:
for seq_record in SeqIO.parse("in_file.txt", "fasta"):
if "Human adenovirus" in seq_record.description:
index += 1
print "%i]" % index, str(seq_record.description)
print str(seq_record.seq) + "\n"顺便问一下,你为什么要打开一个文件来写,却从不给它写信?
https://stackoverflow.com/questions/45984804
复制相似问题