Bioperl从网络数据库中提取多个序列(Bioperl HOWTO翻译6)
从网络数据库中提取多个序列
虽然有很多更复杂的方法从Genbank中提取多个序列,这里只展示一个比较“生物学”的办法,即利用Bio::DB::Query::GenBank模块。查询Genbank中拟南芥拓扑异构酶(Arabidopsis topoisomerases)的核苷酸序列,代码示例:
use Bio::DB::Query::GenBank;
$query = "Arabidopsis[ORGN] AND topoisomerase[TITL] and 0:3000[SLEN]";
$query_obj = Bio::DB::Query::GenBank->new(-db => 'nucleotide',
-query => $query );
注:类似这种通过字符串获取序列的办法只适用于Bioper 1.5版之后,且只能查询Genbank,至于其他数据库,如Swissprot或EMBL,只能通过标识号或accession号查询。
另一个例子,获取布氏锥虫(Trypanosoma brucei)的 EST序列
$query_obj = Bio::DB::Query::GenBank->new(
-query =>'gbdiv est[prop] AND Trypanosoma brucei [organism]',
-db => 'nucleotide' );
关于Genbank的查询字符串格式,详见此处。
刚才的例子中只是创建了一个查询对象(query object),但并没有真正提取到序列。还需要创建一个数据库对象,然后就可以按照以前讲过的在数据库对象中提取序列信息。
use Bio::DB::GenBank;
use Bio::DB::Query::GenBank;
$query = "Arabidopsis[ORGN] AND topoisomerase[TITL] and 0:3000[SLEN]";
$query_obj = Bio::DB::Query::GenBank->new(-db => 'nucleotide',
-query => $query );
$gb_obj = Bio::DB::GenBank->new;
$stream_obj = $gb_obj->get_Stream_by_query($query_obj);
while ($seq_obj = $stream_obj->next_seq) {
# do something with the sequence object
print $seq_obj->display_id, "\t", $seq_obj->length, "\n";
}
$stream_obj 和get_Stream_by_query会比较陌生。需要提取多个序列信息时,可以使用这种数据流(stream)的形式。和get_Seq_by_id比较类似,只不过可以提取多个序列。
注意上述代码是一步一步分开执行的:先是查询对象,然后传递给数据库对象,最后用一个循环来输出序列信息,循环内用的是序列对象。
警告:一定要注意查询字符串的设置。现在核苷酸数据库非常庞大,如果返回的查询结果包含了非常多的序列的话,程序会长时间运行下去,甚至耗尽内存。可以通过设置[SLEN]来限制结果数量。
本文来源:http://bioops.info/2011/09/bioperl-howto-retrieve-multipleseq-from-database/
相关推荐:
-
***Sequence LengthContains the 1970-01-01 08:00#1
-
***SLEN是显示序列长度的。 1970-01-01 08:00#2
最新创建圈子
-
原料药研发及国内外注册申报
2019-01-25 10:41圈主:caolianhui 帖子:33 -
制药工程交流
2019-01-25 10:40圈主:polysciences 帖子:30 -
健康管理
2019-01-25 10:40圈主:neuromics 帖子:20 -
发酵技术
2019-01-25 10:39圈主:fitzgerald 帖子:17 -
医学肿瘤学临床试验
2019-01-25 10:39圈主:bma 帖子:58