我有两个文件f1.fasta
和f2.fasta
。我想比较f1
和f2
中的序列,但也得到核苷酸不同的位置,以便我可以替换它们。
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]
我花了几个小时研究这个问题,但我无法使其发挥作用。 请我仍然是初学者,非常感谢一个简单的代码。
答案 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不正确,但不确定。最好的运气。