直接呼叫SeqIO.parse命令()in-for循环可以工作,但是预先单独使用它却不行?为什么?

2024-04-26 09:56:17 发布

您现在位置:Python中文网/ 问答频道 /正文

在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命令()变量(?)调用,然后尝试在我的循环中使用它,它不会运行:

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”的身份到底是什么。它是一个变量吗?是物体吗?函数实际返回什么?你知道吗


Tags: 函数代码infromimport命令forparse
1条回答
网友
1楼 · 发布于 2024-04-26 09:56:17

SeqIO.parse()返回一个普通的python生成器。Biopython模块的这一部分是用纯python编写的:

>>> from Bio import SeqIO
>>> a = SeqIO.parse("a.fasta", "fasta")
>>> type(a)
<class 'generator'>

一旦对生成器进行了迭代,就会发现它已耗尽。您不能倒带生成器,但如果不介意将其全部放在内存中,您可以将内容存储在listdict中(如果需要随机访问,则很有用)。您可以使用SeqIO.to_dict(a)将记录id作为键,序列作为值存储在字典中。当然,只需重新构建再次调用SeqIO.parse()的生成器就可以避免将文件内容转储到内存中。你知道吗

相关问题 更多 >