python从基因预测输出中提取序列

时间:2014-10-23 10:54:38

标签: python extract prediction sequences fasta

我使用SoftBerry进行了基因预测,并返回如下输出:

预测的蛋白质:

>FGENESH:[mRNA]   1  12 exon (s)   4267  -   6782  1296 bp, chain +
ATGATACGCACTGCGCTTTCACGAGCAGCGGCCATCGTCGCCGCCCGCACCTCCGCCAAG
CTCCGCCCTTCCCTCCTCGCTCGATCTCCGCCGTCCAGACTCCTCCACGATGGGATTAAC
GCCAACCCAGTTGCTCTTCAGATGATCAACTACGCCGTCTCTCTCGCCAGGTCTCAGAAA
>FGENESH:   1  12 exon (s)   4267  -   6782   431 aa, chain +
MIRTALSRAAAIVAARTSAKLRPSLLARSPPSRLLHDGINANPVALQMINYAVSLARSQK
SDESYGQAQLVLEQCLSSQPSEGQDLATHNSRAMVLMAMSTLLSERGKLDEAIEKLQKVE

等:广泛的输出,因此手动编辑并不简单。 我需要剔除以'> FGENESH:[mRNA]'开头的序列。所以,我试试这个:

for line in infile:
    if line.startswith('>FGENESH:[mRNA]'):
        print(line)
        outfile.write(line)

这只给我标题行:

>FGENESH:[mRNA]   1  12 exon (s)   4267  -   6782  1296 bp, chain +

但是,我希望输出看起来像这样:

>FGENESH:[mRNA]   1  12 exon (s)   4267  -   6782  1296 bp, chain +
ATGATACGCACTGCGCTTTCACGAGCAGCGGCCATCGTCGCCGCCCGCACCTCCGCCAAG
CTCCGCCCTTCCCTCCTCGCTCGATCTCCGCCGTCCAGACTCCTCCACGATGGGATTAAC
GCCAACCCAGTTGCTCTTCAGATGATCAACTACGCCGTCTCTCTCGCCAGGTCTCAGAAA

有人可以建议我如何获得吗? 我非常感激 - 做一个新手和所有人。 谢谢。

JD

3 个答案:

答案 0 :(得分:3)

您的基因输出采用标准FASTA格式,任何生物信息学包都能准确读取;使用这样的模块将提高下游的通用性。例如,BioPython模块(http://biopython.org/wiki/Biopython)将允许您提取mRNA序列:

from Bio import SeqIO 
from StringIO import StringIO

output = []

input = """>FGENESH:[mRNA]   1  12 exon (s)   4267  -   6782  1296 bp, chain +
ATGATACGCACTGCGCTTTCACGAGCAGCGGCCATCGTCGCCGCCCGCACCTCCGCCAAG
CTCCGCCCTTCCCTCCTCGCTCGATCTCCGCCGTCCAGACTCCTCCACGATGGGATTAAC
GCCAACCCAGTTGCTCTTCAGATGATCAACTACGCCGTCTCTCTCGCCAGGTCTCAGAAA
>FGENESH:   1  12 exon (s)   4267  -   6782   431 aa, chain +
MIRTALSRAAAIVAARTSAKLRPSLLARSPPSRLLHDGINANPVALQMINYAVSLARSQK
SDESYGQAQLVLEQCLSSQPSEGQDLATHNSRAMVLMAMSTLLSERGKLDEAIEKLQKVE"""

for record in SeqIO.parse(StringIO(input), 'fasta'):
    if "FGENESH:[mRNA]" in record.description:
        output.append(record)

print output[0].format('fasta')

输出:

>FGENESH:[mRNA]  1 12 exon (s)  4267 -  6782 1296 bp, chain +
ATGATACGCACTGCGCTTTCACGAGCAGCGGCCATCGTCGCCGCCCGCACCTCCGCCAAG
CTCCGCCCTTCCCTCCTCGCTCGATCTCCGCCGTCCAGACTCCTCCACGATGGGATTAAC
GCCAACCCAGTTGCTCTTCAGATGATCAACTACGCCGTCTCTCTCGCCAGGTCTCAGAAA

但是之后你可以轻松地对序列做更多的事情,比如翻译它们:

print output[0].seq.translate() 

MIRTALSRAAAIVAARTSAKLRPSLLARSPPSRLLHDGINANPVALQMINYAVSLARSQK

或者有效地将它们写入文件:

with open("fgene.fasta", "w") as f:
    SeqIO.write(output, f, "fasta")

答案 1 :(得分:1)

flag = False

for line in infile:
    if flag is True:
        if line.startswith('>'):
            flag = False
        else:
            outfile.write(line)
    if line.startswith('>FGENESH:[mRNA]'):
        flag = True
        outfile.write(line)

答案 2 :(得分:1)

也许是基于正则表达式的解决方案:

import re

data = '''>FGENESH:[mRNA]   1  12 exon (s)   4267  -   6782  1296 bp, chain +
ATGATACGCACTGCGCTTTCACGAGCAGCGGCCATCGTCGCCGCCCGCACCTCCGCCAAG
CTCCGCCCTTCCCTCCTCGCTCGATCTCCGCCGTCCAGACTCCTCCACGATGGGATTAAC
GCCAACCCAGTTGCTCTTCAGATGATCAACTACGCCGTCTCTCTCGCCAGGTCTCAGAAA
>FGENESH:   1  12 exon (s)   4267  -   6782   431 aa, chain +
MIRTALSRAAAIVAARTSAKLRPSLLARSPPSRLLHDGINANPVALQMINYAVSLARSQK
SDESYGQAQLVLEQCLSSQPSEGQDLATHNSRAMVLMAMSTLLSERGKLDEAIEKLQKVE
>FGENESH:[mRNA]   1  12 exon (s)   4267  -   6782  1296 bp, chain +
ATGATACGCACTGCGCTTTCACGAGCAGCGGCCATCGTCGCCGCCCGCACCTCCGCCAAG
CTCCGCCCTTCCCTCCTCGCTCGATCTCCGCCGTCCAGACTCCTCCACGATGGGATTAAC
GCCAACCCAGTTGCTCTTCAGATGATCAACTACGCCGTCTCTCTCGCCAGGTCTCAGAAA'''

pattern = re.compile(r'^(>FGENESH:\[mRNA\].*?[ACTG\n]+)$', re.MULTILINE|re.DOTALL)
for match in pattern.findall(data):
    print match

输出:

>FGENESH:[mRNA]   1  12 exon (s)   4267  -   6782  1296 bp, chain +
ATGATACGCACTGCGCTTTCACGAGCAGCGGCCATCGTCGCCGCCCGCACCTCCGCCAAG
CTCCGCCCTTCCCTCCTCGCTCGATCTCCGCCGTCCAGACTCCTCCACGATGGGATTAAC
GCCAACCCAGTTGCTCTTCAGATGATCAACTACGCCGTCTCTCTCGCCAGGTCTCAGAAA
>FGENESH:[mRNA]   1  12 exon (s)   4267  -   6782  1296 bp, chain +
ATGATACGCACTGCGCTTTCACGAGCAGCGGCCATCGTCGCCGCCCGCACCTCCGCCAAG
CTCCGCCCTTCCCTCCTCGCTCGATCTCCGCCGTCCAGACTCCTCCACGATGGGATTAAC
GCCAACCCAGTTGCTCTTCAGATGATCAACTACGCCGTCTCTCTCGCCAGGTCTCAGAAA