我有兴趣在python中使用pairwise2
知道与字符串匹配的残基索引。
例如我有两个字符串
A:' EEEEE HHH HHH EEEEE'
和
B: 'EEE EEEE HHH'
使用以下代码:
from Bio import pairwise2
from Bio.pairwise2 import format_alignment
alignment = pairwise2.align.localdc(A,B, matrix,gap_function_1,gap_function_2)
我得到的一个对齐方式是:
EEE-------EE--- HHH HHH EEEEE
||| || |||||||||
EEE EEEE HHH--------------------------
Score=29.6
我想获得匹配的索引,即seq A中与seq B匹配的所有Es
,Hs
和' '
的原始位置。
我该怎么做?
答案 0 :(得分:0)
我假设A
中的第一个空格是拼写错误?另外,对齐看起来会有所不同。
所以,假设:
A = 'EEEEE HHH HHH EEEEE'
B = 'EEE EEEE HHH'
alignment = """EEE-------EE--- HHH HHH EEEEE
||| || |||||||||
EEE EEEE HHH--------------------------
Score=29.6"""
我们可以写一个函数compare()
:
def compare(align, matches, original):
result = []
index = -1
for char, match in zip(align, matches):
if char == '-':
index += 0
else:
index += 1
if match == '|':
assert original[index] == char
result.append(index)
return result
然后
align_A, matches, align_B, score = alignment.splitlines()
print(compare(align_A, matches, A))
给予[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
。快速目视检查确认了这一点:A
的前14个字符匹配(5 E
s,6个空格和3 H
s)。和
print(compare(align_B, matches, B))
给出[0, 1, 2, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23]
。