在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'的身份究竟是什么?它是变量吗?它是一个对象吗?功能实际上返回了什么?
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()
将避免将文件内容转储到内存中。