2014-04-25 30 views
1

我是编程领域的新手,我试图掌握python循环背后的结构和逻辑。可能有人请向我解释,为什么这件事情不工作:Biopython通过FASTA迭代不起作用?

from Bio.SeqUtils import GC 
from Bio import SeqIO 
i = 0 
record = SeqIO.read(open("group_%d.fasta"), "fasta")% i 
for x in record.seq: 
    print GC(record.seq) 
    i+=1 

上面的代码产生以下错误:

IOError: [Errno 2] No such file or directory: 'group_%d.fasta') 

回答

2

你只需要字符串格式化有点不对劲。

此:

record = SeqIO.read(open("group_%d.fasta"), "fasta")% i 

应该是:

record = SeqIO.read(open("group_%d.fasta" % i), "fasta") 

我会移动那个东西一with语句中,以确保该文件实际上是正确关闭。

with open("group_%d.fasta" % i, "r") as fasta: 
    record = SeqIO.read(fasta, "fasta") 
+1

非常感谢,我实际上尝试过类似的东西,但不完全是这样,它实际上起作用了!我非常感谢你的帮助。 –

1

线

record = SeqIO.read(open("group_%d.fasta"), "fasta")% i 

不会做的事情在你认为的顺序。它尝试的第一件事是:

open("group_%d.fasta") 

这会失败,并显示错误。您需要将括号内的格式参数:

record = SeqIO.read(open("group_%d.fasta" % i), "fasta") 

,或者更好,切换到更现代str.format

record = SeqIO.read(open("group_{0:d}fasta".format(i)), "fasta") 

这使得它更清晰,其中格式化参数应该去。

+0

谢谢,这正是我想要的:D –