2017-07-03 18 views
-1

私はf1.fastaf2.fastaの2つのファイルを持っています。私はf1f2の配列を比較したいですが、ヌクレオチドが異なるので、それらを置き換えることもできます。辞書を使用して2つのFASTAファイルを比較して差分の位置を取得します

f1 FASTAの例:私はたとえば取得したいと思い

>VFG0127 

ATGCCTGGXXXTATA... 

>VFG0007 

TTAJGCATATSTCAT... 

f2 FASTAの

>VFG0127 

ATGCCTGGAAATATA... 

>VFG0007 

TTAGGCATATTTCAT... 

例VFG0127は|位置7、XはAでなければなりません...

私はこのコードを試しましたが、どこにも行きません。

dict_1 = {} 
dict_2 = {} 

with open(f1, 'r') as f1, open (f2, 'r') as f2: 
    for line in f1: 
     if line.startswith('>'): 
      id_acc1 = line.strip() 
      seq_1 = f1.next().strip() 
      dict_1[id_acc1]=seq_1 
      #print dict_1 
    for line in f2: 
     if line.startswith('>'): 
      id_acc2 = line.strip() 
      seq_2 = f2.next().strip() 
      dict_2[id_acc2]=seq_2 
      #print dict_2 

    diffkeys = [k for k in dict_1.values()[index] if dict_1[k] != dict_2[k]] 
    for k in diffkeys: 
     print k, ':', dict_1[k], '->', dict_2[k] 

私はこの件に関して数時間を費やしており、私はそれを機能させることはできません。 私はまだ初心者ですが、シンプルなコードをいただければ幸いです。

+0

* ".. f1.fasta:" *から* "...私は" *を望むまであなたの入力をもう一度見てください。それは私に意味をなさない –

答えて

0

これはうまくいくと思います。あなたのfastaファイルがどれくらい正確であるかに少し依存します。

f1 = open("f1.fasta","r").readlines() 
f2 = open("f2.fasta","r").readlines() 

## Read the files 
dict1 = {} 
dict2 = {} 
currentID = "" 
for l in f1: 
    line = l.strip() 
    if line[0] == ">": 
     currentID = line[1:] 
     dict1[line[1:]] = "" 
    else: 
     dict1[currentID] = dict1[currentID]+line 

currentID = "" 

for l in f2: 
    line = l.strip() 
    if line[0] == ">": 
     currentID = line[1:] 
     dict2[line[1:]] = "" 
    else: 
     dict2[currentID] = dict2[currentID]+line 

##Assuming that both sequences have same length 
for key in dict1.keys(): 
    if dict1[key] != dict2[key]: 
     for i in range(len(dict1[key])): 
      if dict1[key][i] != dict2[key][i]: 
       print(key, i, dict1[key][i], dict2[key][i]) 

あなたのdiffkeysは正しくないとは思いますが、確かです。幸運のベスト。

+0

ありがとう –

関連する問題