Abr*_*mad 3 python bioinformatics fasta biopython
在 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")
Run Code Online (Sandbox Code Playgroud)
但是,我首先将 SeqIO.parse() 的输出存储在名为 a 的变量(?)中,然后尝试在我的循环中使用它,它不会运行:
from Bio import SeqIO
a = SeqIO.parse("a.fasta", "fasta")
records = list(a)
for asq in a:
print("Q")
Run Code Online (Sandbox Code Playgroud)
这是因为函数 || 的输出吗?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'>
Run Code Online (Sandbox Code Playgroud)
正如您所发现的,一旦生成器被迭代,它就会耗尽。您无法倒带生成器,但您可以将内容存储在list或中dict,如果您不介意将其全部放入内存中(如果您需要随机访问,则很有用)。您可以使用SeqIO.to_dict(a)以记录 id 作为键、以序列作为值的方式存储在字典中。当然,只需重新构建生成器SeqIO.parse()再次调用即可避免将文件内容转储到内存中。