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

十二月 14, 2011

首先声明作废两篇关于下载序列的文章:第一篇第二篇。原因很简单:天朝的网速已经不能容忍了。

在此推荐一个新的下载序列的方法:使用 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 在运行时出现的那些日志很烦人,但千万别取消它们,这是很好的检查工具。

posted in Perl by billzt

Follow comments via the RSS Feed | Leave a comment | Trackback URL

说点什么

9 评论 在 "使用 dbfetch 从远程数据库中批量下载序列"

提醒
排序:   最新 | 最旧 | 得票最多
游客

www perl好方便 wget -O :mrgreen:

游客

@Mucid, 哈哈,这是调用系统命令吧,好多语言也应该能够做到

游客

@billzt, C语言是打个括号吧,system(pause) //和windows下的 system(pause) 效果不同

游客

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

游客

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

游客

这个看不懂 一头雾水 - -

游客

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

游客

@jiechic, 很欢迎啊!

游客

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

wpDiscuz
 

Copyright © 2010-2017 | Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org