【问题标题】:Incorrect output format when translating DNA to Protein将 DNA 翻译成蛋白质时输出格式不正确
【发布时间】:2023-04-05 09:37:01
【问题描述】:

我知道以前有人问过这个问题,但我得到了一些非常奇怪的输出。基本上,我正在尝试将 .fasta 格式的 DNA 序列(即以“>”开头的标识符,后跟下一行的序列)转换为相同格式的氨基酸字母。我有代码:

#!/usr/bin/python

import sys

filename = sys.argv[1]

def translate_dna(sequence):

    codontable = {
    'ACC':'T', 'ACG':'T', 'ACT':'T',
    'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K',
    'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R',
    'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L',
    'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P',
    'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q',
    'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R',
    'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V',
    'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A',
    'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E',
    'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G',
    'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S',
    'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L',
    'TAC':'Y', 'TAT':'Y', 'TAA':'*', 'TAG':'*',
    'TGC':'C', 'TGT':'C', 'TGA':'*', 'TGG':'W',
    'ATG':'M'
    }
    proteinsequence = ''
    start = sequence.find('ATG')
    sequencestart = sequence[int(start):]
    stop = sequencestart.find('TAA')
    cds = str(sequencestart[:int(stop)+3])

    for n in range (0,len(cds),3):
            if cds[n:n+3] in codontable:
                    proteinsequence += codontable[cds[n:n+3]]
                    print proteinsequence
            sequence = ''

header = ''
sequence = ''
for line in open(filename):
    if line[0] == ">":
            if header != '':
                    print header
                    translate_dna(sequence)

            header = line.strip()
            sequence = ''
    else:
            sequence += line.strip()

print header
translate_dna(sequence)

我的输出应该是这样的: mouse_IPS1_cds MFAEDKTY(等等等等)

但我实际上得到了这个,它每行打印一个新字母并且没有完成到序列的末尾: mouse_IPS1_cds 米 中频 外交部 MFAE MFAED MFAEDK MFAEDKT MFAEDKTY(它应该更长的时候就停在这里)

因此,输出使这种半三角形不完整的字母列表每行仅增加一个。

请问,有没有人可以指出是什么导致了这种情况发生?为什么它会每行打印一个新字母,然后甚至没有完成序列?

非常感谢任何帮助。

【问题讨论】:

    标签: python dna-sequence


    【解决方案1】:

    您正在通过构建它的循环在每次迭代中打印proteinsequence。结果,您获得了每个中间版本。将 print 语句移动到循环的末尾,像这样,你只会打印出最终的产品:

    for n in range (0,len(cds),3):
            if cds[n:n+3] in codontable:
                    proteinsequence += codontable[cds[n:n+3]]
            sequence = ''
    print proteinsequence
    

    【讨论】:

    • 哦,当然!如此简单,我不敢相信我错过了,谢谢!出于某种原因,它在序列的中间停止了翻译……不知道为什么。我试图在代码中看到一些会阻止它在序列中走得更远的东西。我不明白它是如何翻译一些但不是全部的。
    • 嗯,这听起来很奇怪。如果没有看到示例 FASTA 文件,很难说为什么会发生这种情况,但是您的代码中有两件事看起来很奇怪:1)您检查密码子是否在密码子表中 - 有一个合适的氨基酸可以关联和三个碱基的序列,所以不应该有不在表中的密码子。 2)您在 for 循环中设置 sequence = '' 是否有原因?我认为这是无害的,但似乎没有必要。我怀疑这些会导致中途停止,但它们可能是很好的起点?
    • (我假设您已经检查了中间某处的意外终止密码子。我还假设您只在三个终止密码子中的一个处停止是有原因的)
    • 一切顺利。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多