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

十一月 17, 2010

有的时候,从远程数据库里下载得到的基因序列、蛋白质序列是诸如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呢?简单地回答就是:理论上能,但没有必要。因为,无中生有难啊!

posted in Perl by billzt

Follow comments via the RSS Feed | Leave a comment | Trackback URL

7
说点什么

3 Comment threads
4 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Recent comment authors

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
最新 最旧 得票最多
提醒
游客

哦哦 Perl 不错哦 记得它比较强大的功能是正则表达式

游客
billzt

是的呢~Perl是我们工作的主要工具~

游客

对了 你也喜欢仙剑四哦 呵呵

游客
billzt

我是喜欢所有的仙剑系列啦

游客
lifeislovely

你好额~我请教一个问题。我想把ace文件中的全部序列取出然后保存成fasta格式~~这个我该怎么办呢~~

游客
billzt

@lifeislovely, SeqIO 模块支持 ace 格式的,你把例子里面的 genbank 换成 ace 就可以。由于我以前并没有接触过 ace 序列,所以无法自己试验

游客
lifeislovely

@billzt, 😛 因为ace的格式有点复杂,所以直接改了的话bioperl也无法操作~还要加上assemble模块~嘿嘿

 

Copyright © 2010-2018 | Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org