在 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()
即可避免将文件内容转储到内存中。
关于python - 在 for 循环中直接调用 SeqIO.parse() 可以,但是事先单独使用它不行吗?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54798332/