我试图通过BLAST解析几十个序列,使用Bio.Blast和NCBIWWW,在Python 2.7中。有一个或几个序列没有问题,但NCBIWWW.qblast()总是在大约5-7次迭代BLAST搜索后停止。重要的是,程序不会崩溃并退出并显示错误 - 它只是停顿,并且永远冻结。我必须手动退出应用程序。这也不是因特网连接的问题 - 没有错误表明这一点。
我不知道出了什么问题。我的代码中是否存在阻止多个BLAST搜索的错误,或者是否存在用于此目的的替代算法?
我的代码:
from Bio.Blast import NCBIWWW
import urllib
def load_uniprot_fasta(identifier): #loads fasta file for a given UniProt identifier
link = "http://www.uniprot.org/uniprot/" + identifier + ".fasta"
f = urllib.urlopen(link)
content = f.read()
print content
print "\n"
new_file = open(str(identifier)+".seq", "w")
new_file.write(content)
evalue = 0.00001
id_list = open("list.list", "r") #this file is a list of UniProt identifiers, every line is a new identifier
for line in id_list:
uniprot_id = ""
uniprot_id = str(line).strip("\n")
load_uniprot_fasta(uniprot_id) #creates a <uniprot_id>.fasta file
fasta_object = open(str(uniprot_id)+".seq").read()
result_handle = NCBIWWW.qblast("blastp", "swissprot", fasta_object)
print "SUCCESS\n"
答案 0 :(得分:0)
我认为代码中没有任何故意延迟 - 您是否阅读了NCBI BLAST Usage Guidlines:
NCBI BLAST服务器是共享资源。我们优先考虑 互动用户。 ...为避免出现问题,API用户应遵守 以下准则:
虽然NCBIWWW
有一个延迟机制来检查查询结果的频率,但我没有看到它增加了查询之间的延迟。我不是说这绝对是你的问题,但你可能不在NCBI指导方针之内。我在这个问题上看到的另一条建议是:
请勿提交仅包含单个序列的搜索!你需要 批量查询并在单个搜索请求中提交一个集合。