多个序列的Bio.Blast(NCBIWWW)失败并停止

时间:2017-11-13 02:14:32

标签: python bioinformatics biopython blast ncbi

我试图通过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"

1 个答案:

答案 0 :(得分:0)

我认为代码中没有任何故意延迟 - 您是否阅读了NCBI BLAST Usage Guidlines:

  

NCBI BLAST服务器是共享资源。我们优先考虑   互动用户。 ...为避免出现问题,API用户应遵守   以下准则:

  • 请勿每10秒钟更频繁地与服务器联系。
  • 不要每分钟更频繁地轮询任何一个RID。
  • 使用URL参数电子邮件和工具,以便NCBI可以与您联系 有一个问题。
  • 周末或晚上9点至早上5点之间运行脚本 如果超过50次搜索将在工作日的东部时间 提交。

虽然NCBIWWW有一个延迟机制来检查查询结果的频率,但我没有看到它增加了查询之间的延迟。我不是说这绝对是你的问题,但你可能不在NCBI指导方针之内。我在这个问题上看到的另一条建议是:

  

请勿提交仅包含单个序列的搜索!你需要   批量查询并在单个搜索请求中提交一个集合。