0

我一直在尝试使用 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 格式的文件。

谢谢,~杰

4

2 回答 2

0

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

于 2013-10-13T17:35:57.380 回答
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;这将有助于解决大多数“为什么这不起作用?” 通过生成诊断消息来确定问题类型,最好包含这些行。

于 2013-10-13T21:08:30.960 回答