2013-10-13 85 views
0

我一直在嘗試使用BioPerl編寫代碼來查詢Genbank中的特定蛋白質,然後將結果打印到fasta文件中。到目前爲止,我已經運行的代碼可以將結果打印到屏幕上,但不能打印到文件中。我在BioPerl網站和其他資源(CPAN,PerlMonks等)上做了大量的研究,但是我還沒有找到任何可以解決我的問題的方法。我瞭解如何從文件中讀取某些內容,然後將輸出打印到新文件(使用SeqIO),但是我遇到的問題似乎是我想要程序讀取的內容不存儲在文本或FASTA文件中,但是是數據庫查詢的結果。幫幫我?我非常喜歡Perl/BioPerl和編程方面的新手。如何查詢Genbank並將結果打印到fasta文件?

這裏是我到目前爲止的代碼:

#!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

您的代碼實際上非常接近,您在循環中返回了一個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;到腳本的頂部。這將有助於解決大多數「爲什麼這不起作用?」通過生成診斷消息的問題類型,並且包含這些行是一個好主意。

+0

SES,我的代碼現在可以工作。非常感謝你。 – user2852013

0

假設你有數據做出FASTA序列(這好像你這樣做),你可以使用Bio::FASTASequence模塊seq2file功能?我從來沒有用過它,也不是生物信息學專家,只是看到了那裏的選擇,並認爲它可能對你有用。