比较两个FASTA文件以使用字典获取差异的位置

时间:2017-07-03 13:41:39

标签: python bioinformatics

我有两个文件f1.fastaf2.fasta。我想比较f1f2中的序列,但也得到核苷酸不同的位置,以便我可以替换它们。

f1 FASTA的例子:

>VFG0127

ATGCCTGGAAATATA...

>VFG0007

TTAGGCATATTTCAT...

f2 FASTA的例子:

>VFG0127

ATGCCTGGXXXTATA...

>VFG0007

TTAJGCATATSTCAT...

我想举个例子: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]

我花了几个小时研究这个问题,但我无法使其发挥作用。 请我仍然是初学者,非常感谢一个简单的代码。

1 个答案:

答案 0 :(得分: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不正确,但不确定。最好的运气。