如何查询Genbank并将结果打印到fasta文件?

时间:2013-10-13 17:13:04

标签: perl file-io io output bioperl

我一直在尝试使用BioPerl编写代码,该代码将查询Genbank中的特定蛋白质,然后将结果打印到fasta文件中。到目前为止我的代码工作,我可以将结果打印到屏幕上,但不能打印到文件。我已经对BioPerl网站和其他来源(CPAN,PerlMonks等)进行了大量研究,但我找不到任何可以解决我问题的方法。我理解如何从文件中读取内容然后将输出打印到新文件(使用SeqIO),但我遇到的问题似乎是我希望程序读取的内容不存储在文本或FASTA文件中,但是是数据库查询的结果。救命?我是一名初学者,是Perl / BioPerl的新手,也是一般编程人员。

这是我到目前为止的代码:

#!usr/bin/perl
use Bio::DB::GenBank;
use Bio::DB::Query::GenBank;
use Bio::Seq;

$query = "Homo sapiens[ORGN] AND TFII-I[TITL]";

$query_obj = Bio::DB::Query::GenBank->new(-db => 'protein', -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) 
{print $seq_obj->desc, "\t", $seq_obj->seq, "\n";
}

所以,我想在最后一行做的不是打印到屏幕上,而是以fasta格式打印到文件。

谢谢, 〜杰

2 个答案:

答案 0 :(得分:0)

假设你有数据来创建一个fasta seq(你似乎在做),你可以使用Bio::FASTASequence模块seq2file函数吗?我从未使用它,也不是生物信息学专家,只是看到那里的选项并认为它可能对你有用。

答案 1 :(得分:0)

你的代码实际上非常接近,你在循环中返回一个Bio :: Seq对象,你只需要创建一个Bio :: SeqIO对象,它可以处理这些对象并将它们写入文件(“myseqs。 fasta“是示例中的文件。”

#!usr/bin/env perl                                                                                                                                                               

use strict;
use warnings;
use Bio::DB::GenBank;
use Bio::DB::Query::GenBank;
use Bio::SeqIO;

my $query = "Homo sapiens[ORGN] AND TFII-I[TITL]";

my $query_obj = Bio::DB::Query::GenBank->new(-db => 'protein', -query => $query);

my $gb_obj = Bio::DB::GenBank->new(-format => 'fasta');

my $stream_obj = $gb_obj->get_Stream_by_query($query_obj);
my $seq_out = Bio::SeqIO->new(-file => ">myseqs.fasta", -format => 'fasta');

while (my $seq_obj = $stream_obj->next_seq) {
    $seq_out->write_seq($seq_obj);
}

另请注意,我在脚本顶部添加了use strict;use warnings;。这将有助于解决大多数“为什么这不起作用?”通过生成诊断消息的问题类型,最好包括这些行。