bioperl提供序列模块(Seq和SeqIO)的使用
其实这样的接口很多,很多程序包例如emboss、cgc都有这样的功能,当然也可以在perl程序中调用,但BioPerl提供的可能是最强大也是最简单的解决方案。
一个简单的例子,我有一个文件,genebank的格式,需要输出为fasta格式,用于序列比对,(或者需要其他格式是用于其他的操作,例如需要genewise的输入格式等等,或者是直接就是大量的abi测序的trace data或是solexa测序文件,以及来自不同数据库的不同格式的文件),大道至简的方法如下:
#!/bin/perl -w
use BIO::SeqIO;
$seq_input=Bio::SeqIO->new(-file =>"sequence.fasta",-alphabet=>"dna");
#输入,变量=模块->命令(-参数 =>值),看起来比open复杂?
#但中间需要进行的格式转换全部省略了,而且甚至不告诉他是蛋白还是dna序列,
#该模块自动会判断的,如果你确信格式可以告诉他输入的是某种格式,方法是 -format =>格式,
#当然不告诉他判断出来基本也没什么问题。
$seq_obj=$seq_input->next_seq;
#使用 变量=变量->参数,直接调用该变量的不同参数对应的值;
#next_seq是个非常常用的命令,可以调用下一条序列,接着往下看就知道了;
while($seq_obj){
print "$seq_obj->seq\n";
#在这个循环中调用了上面的next_seq,一直取到空为止,
#当然可以把上面的写到括号里减少行数,这里的->参数是直接输出序列,
#你也可以选择输出其他参数,如名称、位置等
}
这是bioperl里最简单也是最常用的一个模块,似乎自己多写几行也可以达到同样的效果,而且不用打哪么多“:”,但是,这个模块因为其通用性和规范性,在各个程序间转换显得轻而易举,完全可以写个百行以内的程序实现目前NCBI的Blast和entrze的功能,成为database的IO接口。
(bioperl提供了几乎所有生物软件包的调用,以往写perl程序的时候是为了在软件包之间转换,用bioperl只要简单的告诉他你用各个软件包的顺序和调用参数,转换就完全免了)
转自: Vanilla's sky