3

我正在尝试使用 biopython 下载由特定机构测序的生物列表中的所有蛋白质。我有与每个有机体相关的有机体名称和 BioProject;具体来说,我正在寻找分析在最近的一些基因组序列中发现的蛋白质。我想使用efetch以最友好的方式批量下载蛋白质文件。我最近尝试下载相关生物的所有蛋白质 FASTA 序列如下:

  net_handle = Entrez.efetch(db="protein",
                             id=mydictionary["BioPROJECT"][i],
                             rettype="fasta")

每个生物体大约有 3000-4500 种蛋白质;因此,使用 esearch 并尝试一次提取每种蛋白质是不现实的。另外,我希望每个生物体都有一个包含其所有蛋白质的 FASTA 文件。

不幸的是,当我运行这行代码时,我收到以下错误: urllib2.HTTPError: HTTP Error 400: Bad Request.

它出现在我感兴趣的所有生物体中,我不能简单地在他们的核苷酸数据库中找到它们的基因组序列并下载“蛋白质编码序列”

如何以不会使 NCBI 服务器超载的方式获得我想要的这些蛋白质序列?我希望我可以复制我在 NCBI 的网络浏览器上可以做的事情:选择蛋白质数据库,搜索 Bioproject 编号,然后将所有找到的蛋白质序列保存到一个 fasta 文件中(在“发送到”下拉菜单)

4

2 回答 2

3

尝试从PATRIC的 FTP 下载序列,这是一个金矿,首先它组织得更好,其次,数据比 NCBI 干净得多。顺便说一下,PATRIC 得到了 NIH 的支持。

PATRIC 包含大约 15000 多个基因组,并在单独的文件中提供它们的 DNA、蛋白质、蛋白质编码区的 DNA、EC、通路、基因库。超级方便。看看你自己那里:

ftp://ftp.patricbrc.org/patric2

我建议您先从所有生物体中下载所有需要的文件,然后在将它们全部放在硬盘驱动器上之后再选择所需的文件。以下python脚本一次性下载PATRIC提供的ec号标注文件(如果有代理,需要在评论区配置):

from ftplib import FTP
import sys, os

#######if you have proxy

####fill in you proxy ip here
#site = FTP('1.1.1.1')

#site.set_debuglevel(1)
#msg = site.login('anonymous@ftp.patricbrc.org')

site = FTP("ftp.patricbrc.org")
site.login()
site.cwd('/patric2/current_release/ec/')

bacteria_list = []
site.retrlines('LIST', bacteria_list.append)

output = sys.argv[1]
if not output.endswith("/"):
    output += "/"

print "bacteria_list: ", len(bacteria_list)


for c in bacteria_list:

    path_name = c.strip(" ").split()[-1]

    if "PATRIC.ec" in path_name:

        filename = path_name.split("/")[-1]
        site.retrbinary('RETR ' + path_name, open(output + filename , 'w').write)
于 2014-06-20T22:20:52.073 回答
-1

虽然我没有使用 python 的经验,更不用说 biopython,但快速的谷歌搜索发现了一些东西供你查看。

urllib2 HTTP 错误 400:错误请求

urllib2 给出 HTTP 错误 400: Bad Request for certain urls, works for others

于 2013-09-13T20:16:49.297 回答