我一直在尝试使用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格式打印到文件。
谢谢, 〜杰
答案 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;
。这将有助于解决大多数“为什么这不起作用?”通过生成诊断消息的问题类型,最好包括这些行。