Python DNA转化为蛋白质

Python DNA转化为蛋白质,python,dna-sequence,Python,Dna Sequence,我是一名生物学研究生,在过去的几个月里,我自学了非常有限的python来处理我掌握的一些数据。我不是要求家庭作业帮助,这是一个研究项目 有了这个密码,我打算从一个名为序列的字符串中提取一部分,介于:找到“蛋白质翻译”的起始位点,或者第一次出现的ATG(生物学术语是起始密码子),然后是第一次出现的TAA(终止密码子) 然后,函数translate\u dna()应该为字符串中的每三个字母交换字典值。变量CDS正确存在,但for或if my函数中的循环不起作用:(.有什么建议吗?输入文件的格式如下:

我是一名生物学研究生,在过去的几个月里,我自学了非常有限的python来处理我掌握的一些数据。我不是要求家庭作业帮助,这是一个研究项目

有了这个密码,我打算从一个名为序列的字符串中提取一部分,介于:找到“蛋白质翻译”的起始位点,或者第一次出现的ATG(生物学术语是起始密码子),然后是第一次出现的TAA(终止密码子)

然后,函数
translate\u dna()
应该为字符串中的每三个字母交换字典值。变量CDS正确存在,但for或if my函数中的循环不起作用:(.有什么建议吗?输入文件的格式如下:

>gnl|GNOMON|230560476.m Model predicted by Gnomon on Homo sapiens unplaced genomic scaffold, alternate assembly HuRef DEGEN_1103279082069, whole genome shotgun sequence (NW_001841731.1)
CCCCAGTAGCTGGGATTACAGGTTATCCAAGGACATGGAAAAGCCAACACCATGGTAGCATTAATGAAAG
TTTACCAAGAGGAAGATGAAGCCTACCAGGAATTAGTTACCATGGCAACCATGTTTTTCCAGTACTTACT
GCAGCCATTTAGGGCTATGCGAGAAGTTGCAACTTTATGTAAGCTTGAT

>gnl|GNOMON|230560472.m Model predicted by Gnomon on Homo sapiens unplaced genomic scaffold, alternate assembly HuRef DEGEN_1103279082069, whole genome shotgun sequence (NW_001841731.1)
GCCGGCGTTTGACCGCGCTTGGGTGGCCTGGGACCCTGTGGGAGGCTTCCCCGGCGCCGAGAGCCCTGGC
TGACGGCTGATGGGGAGGAGCCGGCGGGCGGAGAAGGCCACGGGCTCCCCAGTACCCTCACCTGCGCGGG
ATCGCTGCGGGAAACCAGGGGGAGCTTCGGCAGGGCCTGCAGAGAGGACAAGCGAAGTTAAGAGCCTAGT
GTACTTGCCGCTGGGAGCTGGGCTAGGCCCCCAACCTTTGCCCTGAAGATGCTGGCAGAGCAGGATGTTG
TAACGGGAAATGTCAGAAATACTGCAAGCAAACTGAAAACAACCCATCCATGTAGGAAAGAATAACACGG
ACTACACACTATGAGGAAACCACAGGGGAGTTTCAGGCCAGTCAGCTTTTGATCTTCAACTTTATAACTT
TCACCTTAGGATATGACGAGCCCACCGGAGTTTCAAAAATGGTATCATTTTGTATCAGGCTTGTTTTTTA
CACTCTTGGTTTCTCACAGAGATAGGTGGTTTCTCCTTAAAATCGAACATTTATATGATGCATTTTACTG
TAGTTACTATCAGAAAAGTTAGTTTTCCCAAATTTAAGTTCACTCTGGGGTACTATAGCGTGAATGTAGT
TCATTCTGTTGAGCTAGTTGTTCATGTTAGTGTAGTTCACATATTTATCTGGAACTCAAAAATGAGGGGT
TGAGAGGGGAAGCTAAAATTCAAAACATGTCCAAATATATAATTTTAATATTTTACTTTATATTTAAAAT
AGAAAAGCAATTGATTCTAGAATTAGACTAATTGCTAGCATTGCTAGGATATATAAAATGAAGCTGAATG
TTTTAACTCTGGAATTTTTCTGAATAGTCTAAGAAATAAGGCTGAAGTGTATCACTTGCCTTAAGTTTAC
TTTTGCGTGTGTGTTTTAATTTTGTTCAGTGGGGCTTTCACTTAAAAAAAAAACCATAATATTATTACCT
GGATAAAAAATACAGCTGAAAGTAGATCACTTTATCTTTAAGCAGAAGGATGGAAATAGAAGAATTTTAA
GAATGTATTGGTTGAAAAACATCTATATTATTTTATTTTTATTTCTCTTCTTGTGGGAGTAAAATAATTT
CCAACCAAATCAGTCCACCTAGATTATACACTGTTCAGTTTGTTTTCTGCCCTGCAGCACAAGCAATAAC
CAGCAGAGACTGGAACCACAGCTGAGGCTCTGTAAATGAGTTGACTGCTAAGGACTTCATGGGGATATTA
ACCTGGGGCATTAAGAGAATCAACATGCTAAAGTACTTGGAGACAGCTCTGTAATGTTTTATGAGGTTTT
TTGTTTTTTTTTTTTGAGACAGAGTCTTGCACTGTCGCCCAGGCTGG
代码:


你的问题源于排队

if cds[n:n+3] in codontable == True
它的计算结果总是
False
,因此您永远不会附加到
proteinsequence
。只需像这样删除
==True
部分即可

if cds[n:n+3] in codontable

您将获得蛋白质序列。此外,确保在
translate\u dna()
返回proteinsequence
,您的代码中还有一个问题-使用
stop=sequencestart.find('TAA'))
您不关心打开的阅读框。在下面的代码中,我将序列拆分为三个三元组,并使用
itertools。takewhile
处理该问题,但也可以使用循环:

from itertools import takewhile

def translate_dna(sequence, codontable, stop_codons = ('TAA', 'TGA', 'TAG')):       
    start = sequence.find('ATG')

    # Take sequence from the first start codon
    trimmed_sequence = sequence[start:]

    # Split it into triplets
    codons = [trimmed_sequence[i:i+3] for i in range(0, len(trimmed_sequence), 3)]
    print(len(codons))
    print(trimmed_sequence)
    print(codons)

    # Take all codons until first stop codon
    coding_sequence  =  takewhile(lambda x: x not in stop_codons and len(x) == 3 , codons)

    # Translate and join into string
    protein_sequence = ''.join([codontable[codon] for codon in coding_sequence])

    # This line assumes there is always stop codon in the sequence
    return "{0}_".format(protein_sequence)

如果这不是一个家庭作业,你为什么不举个例子呢?有人向我指出了这一点,我实际上是从那里开始的。我不相信生物细胞素局限于第一个帧内起始密码子和终止密码子。如果你不确定你拥有的RNA数据,这是可以的,但我知道我有一个明确的单一起始和终止位点的mRNA,所以当我得到结果时如果关于biopython的假设不正确,那么我一定是看错了食谱,甚至有人强调我的阅读错误也会有所帮助。我不反对这里的任何解决方案。我已经有一段时间没有使用biopython了,但如果我没记错的话,它应该适合你的需要。据我所知,密码子表中没有U,取而代之的是T。T代表苏氨酸,这很有意义。非常感谢!删除==true并添加return给了我所需要的。如果我可以,我会向上投票!@KarlEricSwanson你可以接受答案,即使你不能向上投票。勾选投票计数下的复选框。谢谢。这s的工作非常完美,我不是权威,但从我所看到的来看,似乎比我的原始代码更像是python。哦,在看了结果之后,这很接近,但我认为密码子=[trimmed_sequence[I:I+3]对于范围内的I(len(trimmed_sequence)/3)]应该看起来像是范围内的I(0,len的密码子=[trimmed_sequence[I:I+3](trimmed_sequence),3)]否则它将读取字符串中的每三个字符,并从原始开始移动+1。也就是说,对于较长的序列,ATGG从ATG产生MW,0-2个字符,TGG产生1-3个字符,依此类推。
from itertools import takewhile

def translate_dna(sequence, codontable, stop_codons = ('TAA', 'TGA', 'TAG')):       
    start = sequence.find('ATG')

    # Take sequence from the first start codon
    trimmed_sequence = sequence[start:]

    # Split it into triplets
    codons = [trimmed_sequence[i:i+3] for i in range(0, len(trimmed_sequence), 3)]
    print(len(codons))
    print(trimmed_sequence)
    print(codons)

    # Take all codons until first stop codon
    coding_sequence  =  takewhile(lambda x: x not in stop_codons and len(x) == 3 , codons)

    # Translate and join into string
    protein_sequence = ''.join([codontable[codon] for codon in coding_sequence])

    # This line assumes there is always stop codon in the sequence
    return "{0}_".format(protein_sequence)