BioPerl指南 – 序列格式的转换


这里所说的序列格式,都是实际应用中常常碰到的格式。例如Genbank格式、Fasta格式等。

大致上支持以下的格式:

              AB1         ABI tracefile format
              ABI         ABI tracefile format
              ALF         ALF tracefile format
              CTF         CTF tracefile format
              EMBL        EMBL format
              EXP         Staden tagged experiment tracefile format
              Fasta       FASTA format
              Fastq       Fastq format
              GCG         GCG format
              GenBank     GenBank format
              PIR         Protein Information Resource format
              PLN         Staden plain tracefile format
              SCF         SCF tracefile format
              ZTR         ZTR tracefile format
              ace         ACeDB sequence format
              game        GAME XML format
              locuslink   LocusLink annotation (LL_tmpl format only)
              phd         phred output
              qual        Quality values (get a sequence of quality scores)
              raw         Raw format (one sequence per line, no ID)
              swiss       Swissprot format

不过,最经常用到的也不多。按我的经验来说有:Fasta,GenBank,EMBL,swiss。如果你不知道这些格式的具体含义,想要了解一下的话,没问题。下面给你看些例子就能大概明白了。

下面是Fasta的格式,点击下面的链接查看完整的序列

>NM_008261.2  Mus musculus hepatic nuclear factor 4, alpha (Hnf4a), mRNA
GGGACCTGGGAGGAGGCAGGAGGAGGGCGGGGACGGGGGGGGCTGGGGC
............

下面是GenBank格式,点击下面的链接查看完整的格式

LOCUS       NM_008261               4371 bp    mRNA    linear   ROD 07-JUN-2009
DEFINITION  Mus musculus hepatic nuclear factor 4, alpha (Hnf4a), mRNA.
ACCESSION   NM_008261
VERSION     NM_008261.2  GI:46575915
..........

下面是EMBL格式,点击下面的链接查看完整的格式(swiss的格式类似这样,但序列是蛋白的)

ID   AF509467; SV 1; linear; genomic DNA; STD; HUM; 311 BP.
XX
AC   AF509467;
XX
DT   27-MAY-2002 (Rel. 71, Created)

大概类似这样。如果你想了解这些格式的详细信息,可以搜索一下本站的内容。一定程序上不会让你失望。好了,废话少讲。下面进入正题,为你介绍用BioPerl来实现这些格式间的相互转换。

1,你的序列文件放在’inputfile’,输出后放在’>output.fa’,下面的结果是把GenBank格式转换为Fasta格式。这些参数根据你的需要更改。

  #!/usr/bin/perl
  use Bio::SeqIO;
  $seqin = Bio::SeqIO->new( -format => 'GenBank' , -file => 'inputfile');
  $seqout= Bio::SeqIO->new( -format => 'Fasta', -file => '>output.fa');
  while((my $seqobj = $seqin->next_seq())) {

            $seqout->write_seq($seqobj);
  }

2,下面的又比较高级点。基本上无需更改源文件。把下面的命名为’reformat’的文件,用下面的命令运行:

perl reformat format1 format2 < input > output

这样子程序就会把input这个文件的格式(format1)转换为另一个格式(format2),并输出到output。

    #!/usr/bin/perl
    $format1 = shift;
    $format2 = shift || die
       "Usage: reformat format1 format2 < input > output";
    use Bio::SeqIO;
    $in  = Bio::SeqIO->newFh(-format => $format1, -fh => \*ARGV );
    $out = Bio::SeqIO->newFh(-format => $format2 );
    print $out $_ while <$in>;

强大而又高效率的代码。想了解更多,用命令perldoc Bio::SeqIO,不明白这个命令的朋友也就无需明白啦。如果你有兴趣进一步了解的话,这当然不是个难题。

另外还有一个更加强大的脚本,支持更多的格式转换。例如像序列比对的格式之类的。在这里就不多讲啦,如果你的好奇心无药可救,那就给个链接看看:bpsreformat – convert sequence formats。如果看完还有兴趣,那就留个言,我们可以坐下来一起慢慢探讨。


14条回应:“BioPerl指南 – 序列格式的转换”

  1. larry推荐加上
    use strict;
    bioperl官网也建议加上。shabang行加上 -w

  2. 嗯 刚刚是试一下.. 尴尬
    就是求一个 perl语言 是FSATA格式转换为 EMBL 或其他格式的 程序 .. 需要源代码…..

      • 他用的是perldoc Bio::SeqIO 这个确实太高端了 .. 我的意思是说 只用一些 比如 模式匹配 文件系统以及格式化输出 以及文件读写 等比较常用一点的来写 … 他这个 Bio::SeqIO 直接就得到了结果…. 具体过程没有..

  3. use Bio::SeqIO;
    my $in = Bio::SeqIO->new( -format => ‘GenBank’ , -file => ‘sequence.gb’);
    my $out= Bio::SeqIO->new( -format => ‘Fasta’, -file => ‘>output.fsa’);
    my $seqObj = $in->next_seq();

    while ( defined($seqObj) ){
    $out->write_seq($seqObj);
    $seqObj = $in->next_seq();
    }

  4. 我是新手,可是我有很多问题,希望能跟你讨论一下。我的QQ442441455。谢谢!!