Footsteps on my way!
perl/linux/测序分析

初品BioPerl(第五篇:序列格式的转换)

有的时候,从远程数据库里下载得到的基因序列、蛋白质序列是诸如Genbank、EMBL或SwissProt之类的复杂格式,而如果要对这些序列进行blast或clustalw之类的比对,就必须把它们转换成fasta格式的序列才行。
序列转换,是不是要有很复杂的技巧才行呢?当然不是,其实还挺简单。我们前面已经知道如何从文件中获取序列,现在要做的,就是把获得的序列以另一种格式写入新的文件中。瞧!转换就不知不觉地完成了。
      我们先来试试把上一篇提过的那个ecorho.gbk序列转换为fasta格式,然后保存到文件ecorho.fasta里。首先老方法获取序列:

use Bio::SeqIO;
$catch_seq = Bio::SeqIO -> new(-file => 'ecorho.gbk', -format => 'genbank');
$seq_obj = $catch_seq -> next_seq;

现在这条Genbank序列已经放在对象$seq_obj里了。接下来要做的是如何把它写入新的文件中,而且是fasta格式。方法还是借助Bio::SeqIO模块。

$output_seq = Bio::SeqIO -> new(-file => '>ecorho.fasta', -format => 'fasta');

和上面那一句实在是太像了!所不同的是文件名ecorho.fasta前面多了一个大于号!很熟悉吗?没错,这就是建立新文件,而且指明格式为fasta。然后我们就可以把$seq_obj这条序列“放到”新文件里面。调用的是对象$output_seq的write_seq方法。

$output_seq -> write_seq($seq_obj);  # 把序列 $seq_obj 写入新文件中

到此,序列转换就完毕了。打开新生成的ecorho.fasta看一下吧!
刚才只是提及一条复杂序列转换为一条简单序列,如果有多条序列要转换,并且希望都放到一个fasta文件中呢?比如,假设文件ecorho.gbk中有多条Genbank序列,都要把它们转换成fasta格式,并且保存在一个文件ecorho.fasta中,完整的程序就是这样:

use Bio::SeqIO;
$catch_seq = Bio::SeqIO->new(-file=>'ecorho.gbk',-format=>'genbank');
while($seq_obj = $catch_seq->next_seq)
{
    $output_seq = Bio::SeqIO->new(-file=>'>>ecorho.fasta',-format=>'fasta');
    $output_seq->write_seq($seq_obj);
}

不难吧?其实就是简简单单地把”>”符号换成了”>>”符号,表示应该是”追加文件”!
最后可能你还想问:Genbank能转换成fasta,那么fasta能不能转换成Genbank呢?简单地回答就是:理论上能,但没有必要。因为,无中生有难啊

尊重他人劳动成果,转载请注明出处:Bluesky's blog » 初品BioPerl(第五篇:序列格式的转换)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址