在python中,我直接调用函数SeqIO.parse()的代码运行良好:
from Bio import SeqIO
a = SeqIO.parse("a.fasta", "fasta")
records = list(a)
for asq in SeqIO.parse("a.fasta", "fasta"):
print("Q")
但是,在这里,我首先将SeqIO.parse()的输出存储在名为a的变量(?)中,然后尝试在我的循环中使用它,它不会运行:
from Bio import SeqIO
a = SeqIO.parse("a.fasta", "fasta")
records = list(a)
for asq in a:
print("Q")
这是因为函数||的输出SeqIO.parse(“ a.fasta”,“ fasta”)||与直接调用时存储在“ a”中的方式不同吗? 这里的“ a”的确切身份是什么。它是变量吗?是物体吗?函数实际上返回什么?
答案 0 :(得分:3)
SeqIO.parse()
返回一个普通的python生成器。 Biopython模块的这一部分是用纯python编写的:
>>> from Bio import SeqIO
>>> a = SeqIO.parse("a.fasta", "fasta")
>>> type(a)
<class 'generator'>
一旦迭代生成器,就会如您发现的那样耗尽。您不能倒带生成器,但如果不介意将其全部存储在内存中,则可以将内容存储在list
或dict
中(如果需要随机访问,则很有用)。您可以使用SeqIO.to_dict(a)
来存储在字典中,其中记录ID为键,而序列为值。只需重新构建再次调用SeqIO.parse()
的生成器,就可以避免将文件内容转储到内存中。