在上一篇文章中,我没有正确地澄清问题,因此,我想在这里开始一个新的话题。
我有以下物品:
59,000 个蛋白质模式的排序列表(范围从 3 个字符“FFK”到 152 个字符长);
一些长蛋白质序列,也就是我的参考。
我将根据我的参考匹配这些模式并找到匹配的位置。(我的朋友帮助编写了一个脚本。)
import sys
import re
from itertools import chain, izip
# Read input
with open(sys.argv[1], 'r') as f:
sequences = f.read().splitlines()
with open(sys.argv[2], 'r') as g:
patterns = g.read().splitlines()
# Write output
with open(sys.argv[3], 'w') as outputFile:
data_iter = iter(sequences)
order = ['antibody name', 'epitope sequence', 'start', 'end', 'length']
header = '\t'.join([k for k in order])
outputFile.write(header + '\n')
for seq_name, seq in izip(data_iter, data_iter):
locations = [[{'antibody name': seq_name, 'epitope sequence': pattern, 'start': match.start()+1, 'end': match.end(), 'length': len(pattern)} for match in re.finditer(pattern, seq)] for pattern in patterns]
for loc in chain.from_iterable(locations):
output = '\t'.join([str(loc[k]) for k in order])
outputFile.write(output + '\n')
f.close()
g.close()
outputFile.close()
问题是,在这 59,000 个模式中,经过排序后,我发现一个模式的某些部分与其他模式的一部分匹配,我想将它们合并为一个大的“共识”模式并保持共识(参见下面的示例):
TLYLQMNSLRAED
TLYLQMNSLRAEDT
YLQMNSLRAED
YLQMNSLRAEDT
YLQMNSLRAEDTA
YLQMNSLRAEDTAV
将产生
TLYLQMNSLRAEDTAV
另一个例子:
APRLLIYGASS
APRLLIYGASSR
APRLLIYGASSRA
APRLLIYGASSRAT
APRLLIYGASSRATG
APRLLIYGASSRATGIP
APRLLIYGASSRATGIPD
GQAPRLLIY
KPGQAPRLLIYGASSR
KPGQAPRLLIYGASSRAT
KPGQAPRLLIYGASSRATG
KPGQAPRLLIYGASSRATGIPD
LLIYGASSRATG
LLIYGASSRATGIPD
QAPRLLIYGASSR
将产生
KPGQAPRLLIYGASSRATGIPD
PS:我在这里对齐它们,以便更容易可视化。最初的 59,000 个模式没有排序,因此很难在实际文件中看到共识。
在我的特定问题中,我没有选择最长的模式,相反,我需要考虑每个模式以找到共识。我希望我已经对我的具体问题进行了足够清楚的解释。
谢谢!