我正在尝试使用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文件中(在“发送到”下拉菜单下)菜单)
答案 0 :(得分:3)
尝试从PATRIC的FTP下载序列,这是一个金矿,首先它组织得更好,其次,数据比NCBI更清洁。顺便说一句,PATRIC得到NIH的支持。
PATRIC包含大约15000+基因组,并在单独的文件中提供其DNA,蛋白质,蛋白质编码区域的DNA,EC,途径,genbank。超级方便。看看你自己:
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)
答案 1 :(得分:-1)
虽然我没有使用python的经验,更不用说biopython,但是快速的谷歌搜索找到了几个让你看的东西。
urllib2 HTTP Error 400: Bad Request
urllib2 gives HTTP Error 400: Bad Request for certain urls, works for others