2016-04-22 4 views
0

私はアミノ酸に翻訳したいPhylip形式のDNAデータを持っています。私はこれを行うことができるライブラリ(またはモジュール)を検索しようとしましたが、すべてがFastA形式のファイルを翻訳/生成するようです。DNAデータをphylip形式のアミノ酸に翻訳する

これは、入力データがどのように見えるかです:1500は配列の長さ

です

3 1500 

seq1 TTTGCTA... 

seq2 TTCGCAA... 

seq3 TTTGCCA... 

これは私が持っているコードですが、私は取得していた出力ファイルは空です:

#!/usr/bin/python 

import sys 

filename = '/path/to/phylip/data/' 
finalrst = open('/path/to/translated/phylip/data/','w') 


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 = '' 
    for n in range (0,len(sequence),3): 
      if sequence[n:n+3] in codontable: 
        proteinsequence += codontable[cds[n:n+3]] 
      sequence = '' 
    print proteinsequence 

for line in open(filename): 
    if line[0] == "3 1500": 
     finalrst.write(line) 
    elif line == '': 
     finalrst.write(line) 
    elif line.startswith('sequence'): 
      finalrst.write(line + translate_dna(line.replace('sequence', ''))) 

finalrst.close() 

問題の候補がありますか?おそらくこの仕事をするより良い方法でしょうか?

ありがとうございます!

答えて

0

これらのファイルパスはフォルダまたはファイルですか? dataがファイルの場合は、/を最後から削除してください。フォルダパスの場合は、開くファイルを指定する必要があります。

すると、ちょうど正気のためにこれを変更する:

for line in open(filename): 
    if line[0] == "3 1500": 
     finalrst.write(line) 
    elif line == '': 
     finalrst.write(line) 
    elif line.startswith('sequence'): 
     finalrst.write(line + translate_dna(line.replace('sequence', ''))) 

を何かにこのように:

with open(filename, 'r') as readfile: 
    for line in readfile: 
     line = line.strip() 
     # Check the full line, stripped instead of the first character. 
     if line == "3 1500": 
      finalrst.write(line + '\n') 
     elif line == '': 
      finalrst.write(line + '\n') 
     elif line.startswith('sequence'): 
      finalrst.write(line + translate_dna(line.replace('sequence', '')) + '\n') 

readfileファイルハンドルが常に閉じてしまいますこの方法です。

おそらく、ファイルパスがフォルダを指しているからでしょう。そうでない場合は、開いていて閉じていない残っているファイルハンドルが原因である可能性があります。

+0

ありがとうございました!もう1つ質問:私はelif lineを使用しています.startswith( 'seq1'): \t \t \t \t finalrst.write( 'seq1 \ t' + translate_dna(line.split()[+ 1])+ '\ n ')..データセット内のすべてのシーケンスに対して、コードを取得してシーケンス名を認識させる方法や、(1)翻訳しない、(2)翻訳されたデータの前に書き込む方法に関する提案? – Hia3

+0

@ Hia3、私は別の質問としてこれを入力します。 – DuckPuncher

0

translate_dnaは動作していません。ここでは、作業アプローチはまた、他の問題があるとはいえない、最適な

def translate_dna(sequence): 
    sequence = sequence.upper() 

    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' 
    } 

    translated = '' 
    while len(sequence) >=3: 
     substring_3 = sequence[:3] 
     if substring_3 in codontable: 
      translated+= codontable[substring_3] 
      sequence = sequence[1:] 
     else: 
      sequence = sequence[3:] 

    return translated 

です。例:

elif line.startswith('sequence'): 
    finalrst.write(line + translate_dna(line.replace('sequence', ''))) 

入力に「sequence」という文字列はありません。作成する:

elif line.startswith('seq'): 
    finalrst.write(line + '\t' + translate_dna(line.split()[-1])) 
+0

ATT、TTG、TGT、およびATTGTCのように読み込まれた方法からsequence = sequence [1:]をsequence = sequence [3:]に変更しなければならなかったことを除けば、 ATTよりもむしろ、GTC。 – Hia3

+0

うれしい – Spade

関連する問題