2015-04-05 30 views
1

我知道這個問題之前已經被問過了,但我從中得到了一些非常奇怪的輸出。基本上,我試圖將.fasta格式的DNA序列(即以「>」開頭的標識符,然後是下一行的序列)轉換成相同格式的氨基酸字母。我的代碼:將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 中號 MF MFA MFAE MFAED MFAEDK MFAEDKT MFAEDKTY(它在這裏停止時,它應該是長期的呃)

輸出因此使這種半角三角形不完整的字母列表,每增加一行。

請問,有沒有什麼方法可以指出是什麼讓這種情況發生?爲什麼它會在每行打印一個新的字母,然後甚至沒有完成序列?

任何幫助,非常感謝。

回答

1

您正在打印proteinsequence通過您正在其中構建的循環的每次迭代。因此,你會得到每個中間版本。將打印語句移至循環結尾,就像這樣,您只會打印出最終產品:

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

哦,當然了!很簡單,我不能相信我錯過了,謝謝!由於某種原因,它停止了在序列中間的翻譯,儘管......不知道爲什麼。我試圖在代碼中看到阻止它在順序中繼續前進的內容。我不明白它是如何翻譯一些,但不是全部。 – Russ 2015-04-05 01:48:07

+0

嗯,這聽起來很奇怪。很難說沒有看到FASTA文件的例子,爲什麼會出現這種情況,但是在你的代碼中有兩件看起來很奇怪的事情是:1)你檢查密碼子是否在密碼子表中 - 有一個合適的氨基酸可以結合以及三個鹼基的序列,所以不應該有一個不在表中的密碼子。 2)是否有你在for循環中設置sequence =''的原因?我認爲這是無害的,但似乎沒有必要。我懷疑那些會導致中途停止,但他們可能是很好的起點? – seaotternerd 2015-04-05 02:10:34

+0

(我假設你已經在中間某個地方檢查了一個意想不到的終止密碼子,而且我還假設你只是停在三個終止密碼子之一的原因) – seaotternerd 2015-04-05 02:11:38