我使用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
答案 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