响水凹

欢迎来到 Guang-Wen Duan (Dennis Duan) 的个人 Wiki

用户工具

站点工具


computer:perl:seq_content

获取序列内容seq_content.pl

序列格式

基因序列文件的格式有多种,目前碰到的有如下几种:

FASTA格式

>I_CSL_PS2507MT02
TTAAACTCAGCGGGTGGCCTCGCCCATCCTGGGGTCGCATTCCAAACGCCATCCATGGATTGACGCATGATTTTGG
ATCTCCCAAAAAGTATGATCTTCTCTAAGGCATACGACACAATAACATAGGCCTTGATTTAATCCACCCCTTATTG
TTCGCAGCCAACGAGATGATGACCTGCTCTTCAGCACACCGCGCCGAGGGGCACGAGGAGCCACTCTGCAC

这种格式文件的特点是有个“>”开头的注释行。

Seq格式

"Contig 1" (1,717)
  Contig Length:                  717 bases
  Average Length/Sequence:        686 bases
  Total Sequence Length:         1372 bases
  Top Strand:                       1 sequences
  Bottom Strand:                    1 sequences
  Total:                            2 sequences
^^                                                                              
TTGGAAGTAAAAGTCGTAACAAGGTTTCCgTAGGTGAaCcTGCGGAaGGAtCATTGTCGAATCCTGCAATAGCAGAATGA
CCCGCTAACACGTTAAAAATTTAGGCGAGCGTCGGGAGGCCTCGGTCTCCTGTTTGCGAATCCATGGTAGGTGGCCACTC
CCGGGTGGCCACTGGCCTACAAAATCATTCGGGCGCGGTATGCGCCAAGGACCTTAAAATCGAATTGTACGTCCGTATCC
CGTTAGCGGGCATCGGCGTCTTTCCAAAATACAACGACTCTCGACAACGGATATCTCGGCTCTCGCATCGATGAAGAACG
TAGCGAAATGCGATACTTGGTGTGAATTGCAGAATCCCGTGAACCATCGAGTCTTTGAACGCAAGTTGCGCCCGAAGCCA
CTTGGCTGAGGGCACGCCTGCCTGGGTGTCACGCATTGTATTGCCCACAAACCAGTCACACCTGAGAAGTTGTGCCGGTT
TGGGGCGGAAATTGGCCTCCCGTACCTTGTCGTGCGGTTGGCGGAAAAATGAGTCTCCGGCGATGGACGTCGCGACATCG
GTGGTTGTAAAAGACCCTCTTGTCTTGTCGCGTGAATCCTCGTCATCTTAGAGAGCTCCAGGACCCTTAGGCAGCACGTA
CTCTGTGCGCTTCGACTGTGACCCCAGGTCAGGCGGGACtACCCGCTGAGTTTAAGCATATCAATAAGCGGAGGA

这种格式文件的特点是有一行“^^”。

有时“^^”还不止一个:

^^:                                  351,652
Contig 44 (1,652)
  Contig Length:                  652 bases
  Average Length/Sequence:        652 bases
  Total Sequence Length:         1304 bases
  Top Strand:                       1 sequences
  Bottom Strand:                    1 sequences
  Total:                            2 sequences                                 
^^
TTGTCGAAACCTGCATAGCAGAACGACCCGTGAACATGTAACAACAATTGGGTGTCCTTGGTATCGGGCTCTTGTTCGAT
TAATTGGATGCCTTGTCAATGTGCGTCTTTGGTCAGCCCTCTGGGTCCTAAGGACGTCACATTGGCGCAACAACAAACCC
CCGGCACGGCATGTGCCAAGGAAAATTAAACTTAAGAAGGGCTTGTATCATGCTTCTCCGTTTACGGGGTTTGAATGAGA
CGTAGCTTCTTTATAATCACAAACGACTCTCGGCAACGGATATCTCGGCTCACGCATCGATGAAGAACGTAGCAAAATGC
GATACTTGGTGTGAATTGCAGAATCCCGTGAACCATCGAGTTTTTGAACGCAAGTTGCGCCCGAAGTCTTTCGGCCGAGG
GCACGTCTGCCTGGGCGTCACACATCGCGTCGCCCCCACCACGCCTCCTCGATGAGGATGCTTGGATGTGGGCGGAGATT
GGTCTCCCGTTCCTATGGTGCGGTTGGCTAAAACAGGAGTCCCCTTTGACGGATGCACGATTAGTGGTGGTTGACAAGAC
CCTCTTATCAAGTTGTGCGTTCTAAGGAGCAAGGAATATCTCTTCAATGACCCCAATGTGTCGTCTTGTGACGATGCTTC
GATCGCGACCCC

也有的干脆没有注释信息:

^^
GCTGCTATTGAAGCTCCATCTACAAATGGATAAGATTTCGATCTTTGTGTATACGAGTTTTTGAAAATAACGGAACAATG
CCGATTCTCTTCCAAGAAGTTGGTATTGCTCCGTTATTTATTAGGTTTTTTCTTGAATTTTTTTATTTAGGTCCTTGTCC
TTGTTTTACTTCAACAAAACAAAAAGTATTTTTATGGCTTTTGATTTAGTATCCTATTATTATTATGTGCTAATAATTAA
ATTTCCCTTTAGTTATTTTGGCTTTACAGTCATATTATTGGTTTAGAGTCAATTTAATTAAAAAATTATGGAATTTTCTG
CCGAATTAAGGTAAGATAAAAAAAGAATCATCAAAAAAGATGATCAATGGTAGGAATTGCACTCTTTTTTTTGGTAATTT
TGTAGAGAGTAGGGGGCGGATGTAGCCAA

类GCG格式

姑且这么称呼,因为GCG格式不完全是这样的:

        1 ggactctaga gatttacgag ctaaagttct agcgcatgaa agtcgaagta tatactttag
       61 tcgatacaaa gtccgttttt tcgaagatcc actatgataa tgaaaaagat ttctacatat
      121 ccgaccaaat cgatcaagaa tatcccaatc tgataaatcc gtccaaatgg gtttactaat
      181 aggatgcccc gatccagtac aaaattgagc ttttgataag tatcctatga ggagagtagc
      241 ggggactatg gtatcgaatt ttttcattcg agtatctatt agaaatgaat tctccagcat
      301 ttgattcctt actaacaaag tactttttgg tacacttgaa aggtacccca taaaatcgaa
      361 gcaagagttt gctaattggt ttatatggat tcttcgtggc tgagtccaaa aacagaaata
      421 atattgccag aaattgataa ggtagcattt ccatttcttc ttcaaaaaaa aagtgccttt     
      481 tgatgcaaga attccctttc cttgatatcg aacataatgc ataagaggat ccataaagaa
      541 ccatagggtt ttccgagaaa aaccagggta cattatccca aaatgttcca tcttcctaga
      601 aaagtggatt cgttccagaa aagttccaga agatgctaat ggtaagcaag aagattgttt
      661 acgaagaaac aacaaaaaaa attcatattc tgatacataa gagttatata ggaatcgaaa
      721 tagtctttta ttttcttttt gaaaaagaaa aatggatttc attgaagtaa taaaactatt
      781 ccaattcgaa tagtagttaa gaaagaatcg caataaatgc aaagatggaa catcttggat
      841 acggtattga aggagttgaa ccaggatttc caaatggata ggatagggta aatcgtcgac
      901 ctgcaggcat gc

Plain格式

这种格式很明确,就是序列数据本身,没有别的多余信息:

AGTGACTGCGGACGACATTGTCGAACCTGCCTAGCAGAATGACCCGCGAACTTTGTCTAATACTCTCGGGGAAGCAGAAG
GTTGGTTTTTATGGCCTCCCTTTTGTTCCCTTTGTCGGGTGTGCTCGTGTTGCCCTTTGGGTGACACGCTCATTCCCCGG
CCGAACAACGAACCCCGGCGCGAAACGCGTCAAGGAACTTGAACAAGAACGCAACATCCATGCCCCGTTTCTGGGTGCTC
GTGGTGCTTGCTCTCTCATGAACAAAACGACTCTCGGCAACGGATATCTCGGCTCTCGCATCGATGAAGAACGTAGCGAA
ATGCGATACTTGGTGTGAATTGCAGAATCCCGTGAACCATCGAGTTTTTGAA

程序功能

程序要做的,就是从这多种格式的文件中把其中的序列数据取出来(如同Plain格式那样),以便后续放入结构化的数据库中。

根据上述对文件格式的分析,代码依次如下判断:

  1. 如果文件中有一行以“>”打头,则认为是FASTA格式,序列数据从该行后读取;
  2. 如果文件中有“^^”行,则认为是Seq格式,序列数据从最后一个“^^”行后读取;
  3. 如果文件中有数字,则认为是类GCG格式,序列数据是去掉数字和其他多余字符后剩余的部分;
  4. 文件是Plain格式。

代码简述

先把文件内容全部读到变量里(文件都很小):

my @lines = <>;

FASTA格式判断:

my $flags = grep { /^>/ } @lines;
if ($flags) {
    $seq_format = "FASTA";
    for (my $i = 0; $i <= $#lines; $i++) {
        if ($lines[$i] =~ /^>/) {
            $begin_line = $i + 1;
            last;
        }
    }

变量$begin_line记录序列数据开始的行。

Seq格式判断:

} elsif ($flags = grep { /^\^\^/ } @lines) {
    $seq_format = "Seq";
    for (my $i = 0, my $j = 0; $i <= $#lines; $i++) {
        if ($lines[$i] =~ /^\^\^/) {
            $j++;
            if ($j == $flags) {
                $begin_line = $i + 1;
                last;
            }
        }
    }

这里变量$flags记录了文件中存在“^^”行的个数。

类GCG格式判断:

} elsif ($flags = grep { /[0-9]/ } @lines) {
    $seq_format = "GCG-like";

其余都认为是Plain格式:

} else {
    $seq_format = "Plain";
}

读取序列数据,并去掉所有多余字符:

for (my $i = $begin_line; $i <= $#lines; $i++) {
    $seq_content .= $lines[$i];
}
$seq_content =~ s/\r|\n|\s|-|~|[0-9]//g;

计算序列长度:

$seq_length = length($seq_content);

输出结果:

print "Format: $seq_format\n";
print "Length: $seq_length\n";
print "Content:\n";
print "\U$seq_content\n";
 
exit 0;

完毕。

computer/perl/seq_content.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1