BioPython迭代来自fasta文件的序列

时间:2018-04-06 00:41:11

标签: python biopython

我是BioPython的新手,我正在尝试导入fasta / fastq文件并遍历每个序列,同时对每个序列执行一些操作。我知道这似乎是基本的,但我的代码由于某种原因无法正确打印。

from Bio import SeqIO

newfile = open("new.txt", "w")
records = list(SeqIO.parse("rosalind_gc.txt", "fasta"))

i = 0
dna = records[i]

while i <= len(records):
    print (dna.name)
    i = i + 1

我试图基本遍历记录并打印名称,但是我的代码最终只打印“records [0]”,我希望它打印“records [1-10]”。有人可以解释为什么它最终只打印“记录[0]”?

1 个答案:

答案 0 :(得分:1)

您遇到问题的原因在于:

i = 0
dna = records[i]

您的对象'dna'固定为记录的索引0,即记录[0]。由于您没有再次调用它,因此dna将始终固定在该声明上。在while循环中的print语句中,使用以下内容:

while i <= len(records):
    print (records[i].name)
    i = i + 1

如果您希望将对象dna作为记录条目的副本,则需要将dna重新分配给每个索引,在while循环中进行此操作,如下所示:

while i <= len(records):
    dna = records[i]
    print (dna.name)
    i = i + 1

然而,这不是最有效的方式。最后,为了你学习,比使用i = i + 1的while循环更好的方法是使用for循环,如下所示:

for i in range(0,len(records)):
    print (records[i].name)

for循环逐个自动进行迭代。 range()将给出一组从0到记录长度的整数。还有其他方法,但我保持简单。