初品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 评论 在 "初品BioPerl(第五篇:序列格式的转换)"

提醒
排序:   最新 | 最旧 | 得票最多
游客

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

游客

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

游客

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

游客

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

游客

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

游客

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

游客

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

wpDiscuz
 

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