Posted in: Perl/R

使用 dbfetch 从远程数据库中批量下载序列

天朝的网速已经不能容忍了。

在此推荐一个新的下载序列的方法:使用 EMBL-EBI 的 dbfetch 工具,它的主页是:http://www.ebi.ac.uk/Tools/dbfetch/emblfetch

你需要提供的信息有:序列的 ID 号、序列所在的数据库、序列的格式、下载的文件类型。注意:前面三个信息不是随意搭配的,EBI 支持的数据库列表参见 http://www.ebi.ac.uk/Tools/dbfetch/dbfetch/dbfetch.databases,每种数据库只能支持特定的 ID 号以及特定的序列格式,别张冠李戴了。

下面我们以获取 NCBI 的 RefSeq 数据库的 DNA 序列为例来说明,相信这个大名你一定不陌生吧?如果你见到有 NC_004952 这样的 ID 号,没错,十有八九就是来自于 RefSeq 数据库的。假设我们要下载的序列的 ID 号是 NC_00495,所对应的数据库名称为 refseq(别拼写错了,要严格按照网页上的说明填写),序列的格式是 genbank (没有找到这种格式?默认的就是genbank),下载的文件类型为raw(即纯文本文件),那么下载的网址是:

http://www.ebi.ac.uk/Tools/dbfetch/dbfetch?db=refseq&id=NC_004952&format=default&style=raw

下载得到的文件名容易被取得乱七八糟,为了整齐起见,我们可以使用 wget 这个命令行工具:

wget "http://www.ebi.ac.uk/Tools/dbfetch/dbfetch?db=refseq&id=NC_004952&format=default&style=raw" -O NC_004952.gbk

亮点在后面加上了一个 -O 参数,可以把下载得到的文件名改成 NC_004952.gbk,这样子是不是漂亮多了呢?注意:网址两侧的引号千万不能省略(省略的后果是什么自己应该清楚)

也就是说,下载序列的网址格式是:

http://www.ebi.ac.uk/Tools/dbfetch/dbfetch?db=数据库名称&id=序列编号&format=序列格式名称&style=文件类型名称

至于批量获取的话,写一个脚本就 OK 了,只需把“序列编号”用某个变量代替掉。没有规定必须要用哪种程序语言来写,你喜欢哪种就用哪种。比如,我用Perl 程序来编写:

# 先自己想办法把序列的 ID 号放在一个数组 @array 里

for my $id (@array) {


 # url 地址,把 ID 号换成对应的变量
my $url = qq{"http://www.ebi.ac.uk/Tools/dbfetch/dbfetch?db=refseq&id=$id&style=raw"}; 

# 调用系统的 wget 命令
 system "wget $url -O $id.gbk -a log";
}

这里做了一处比较巧妙的改动:在 wget 后面加了一个 -a 参数,可以把所有的日志都追加到一个日志文件里备查(log 文件),虽然 wget 在运行时出现的那些日志很烦人,但千万别取消它们,这是很好的检查工具。


以下内容于2019/9/9更新

BioPython对efetch工具进一步做了整合,详情参考此博客以及BioPython中文页面。注意需要特别小心rettype的写法!

简单语法如下:

from Bio import Entrez

Entrez.email = '[email protected]'

fetch_handle = Entrez.efetch(db="nucleotide", id=["X55964"], rettype="fasta", retmode="text") # id是列表

data = fetch_handle.read() # 字符串搞定

Comments (9) on "使用 dbfetch 从远程数据库中批量下载序列"

  1. Google Chrome 15.0.874.121 GNU/Linux x64

    “天朝的网速伤不起”,但那两篇关于bioperl的日志不失为极好的教程,所以还是改回来吧。在日志开头注明:“天朝网速伤不起,友情提示自觉移步到http://bnuzhutao.cn/archives/813“,就更好

    1. Firefox 8.0 GNU/Linux

      @Puriney, 喔喔,我并没有把那两篇删掉,只是用删划线把它们划掉了,在结尾处添加了链接,你可以去看看 :mrgreen:

  2. Firefox 8.0.1 Windows 7 x64 Edition

    看到你们写的gtkqq的论坛文章看到这个博客的,不过,收藏了。Gtkqq的源码有空研究一下。这个项目还是很有意思的。

  3. Firefox 15.0.1 Windows 7

    谢谢分享。 dbfetch最多一次200个id吧,如果要下上万条序列,是不是很麻烦. 有更好的办法吗? 😛

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注