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

2024-04-20 07:18:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件f1.fastaf2.fasta。我想比较f1和{}中的序列,但也要得到核苷酸不同的位置,这样我就可以替换它们。在

f1FASTA示例:

>VFG0127

ATGCCTGGAAATATA...

>VFG0007

TTAGGCATATTTCAT...

f2FASTA示例:

^{pr2}$

我想得到例如:VFG0127 |位置7,X应该是一个。。。在

我试过这个代码,但我什么也做不到

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]

我在这件事上花了好几个小时,但我没法使它奏效。 请我还是一个初学者,一个简单的代码将不胜感激。在


Tags: 代码inid示例foriflineseq
1条回答
网友
1楼 · 发布于 2024-04-20 07:18:15

我想这应该行得通。这取决于你的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])

我认为你的困难是不正确的,虽然不确定。祝你好运。在

相关问题 更多 >