【问题标题】:BioPython iterating through sequences from fasta fileBioPython 遍历来自 fasta 文件的序列
【发布时间】:2018-04-06 00:41:10
【问题描述】:

我是 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]”。有人可以解释为什么它最终只打印“records[0]”吗?

【问题讨论】:

    标签: python biopython


    【解决方案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 到记录长度的整数。还有其他方法,但我保持简单。

    【讨论】:

    • 哇!非常感谢。感谢您向我展示了几种不同的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多