Bioperl从网络数据库中提取多个序列(Bioperl HOWTO翻译6)

楼主  收藏   举报   帖子创建时间:  2018-07-29 00:00 回复:2 关注量:190

从网络数据库中提取多个序列

英文原文

虽然有很多更复杂的方法从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,至于其他数据库,如SwissprotEMBL,只能通过标识号或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