【发布时间】:2021-10-18 16:01:26
【问题描述】:
我有一个“短字符串”列表,例如:
['MKWVTFISLLLLFSSAYSRGV', 'SSAYSRGVFRRDTHKSEIAH', 'KPKATEEQLKTVMENFVAFVDKCCA']
我需要匹配一个包含在 word 文件 (BSA.docx) 或 .txt 文件(无关紧要)中的“长字符串”,例如:
sp|P02769|ALBU_BOVIN 白蛋白 OS=Bos taurus OX=9913 GN=ALB PE=1 SV=4 MKWVTFISLLLLFSSAYSRGVFRRDTHKSEIAHRFKDLGEEHFKGLVLIAFSQYLQQCPFDEHVKLVNELTEFAKTCVADESHAGCEKSLHTLFGDELCKVASLRETYGDMADCCEKQEPERNECFLSHKDDSPDLPKLKPDPNTLCDEFKADEKKFWGKYLYEIARRHPYFYAPELLYYANKYNGVFQECCQAEDKGACLLPKIETMREKVLASSARQRLRCASIQKFGERALKAWSVARLSQKFPKAEFVEVTKLVTDLTKVHKECCHGDLLECADDRADLAKYICDNQDTISSKLKECCDKPLLEKSHCIAEVEKDAIPENLPPLTADFAEDKDVCKNYQEAKDAFLGSFLYEYSRRHPEYAVSVLLRLAKEYEATLEECCAKDDPHACYSTVFDKLKHLVDEPQNLIKQNCDQFEKLGEYGFQNALIVRYTRKVPQVSTPTLVEVSRSLGKVGTRCCTKPESERMPCTEDYLSLILNRLCVLHEKTPVSEKVTKCCTESLVNRRPCFSALTPDETYVPKAFDEKLFTFHADICTLPDTEKQIKKQTALVELLKHKPKATEEQLKTVMENFVAFVDKCCAADDKEACFAVEGPKLVVSTQTALA
我想使用python(在终端或jupyter笔记本中)获得以下内容:
-
在长字符串中突出显示较短的字符串匹配项。高亮样式并不重要,它可以用黄色标记或粗体或下划线突出显示,任何跳到眼睛看是否匹配的东西。
-
求长字符串的覆盖率为((突出显示的字符数)/(长字符串的总长度))*100。注意长字符串的“>>”开头的第一行只是一个标识符,需要忽略。
这是我当前第一个任务的代码:
from docx import Document
doc = Document('BSA.docx')
peptide_list = ['MKWVTFISLLLLFSSAYSRGV', 'SSAYSRGVFRRDTHKSEIAH', 'KPKATEEQLKTVMENFVAFVDKCCA']
def highlight_peptides(text, keywords):
text = text.paragraphs[1].text
replacement = "\033[91m" + "\\1" + "\033[39m"
enter code here`text = re.sub("(" + "|".join(map(re.escape, keywords)) + ")", replacement, text, flags=re.I)
highlight_peptides(doc, peptide_list)
问题在于列表中的前两个短字符串重叠,结果中只有第一个在序列中以红色突出显示。
请参阅下面的第一个链接,其中包含我正在获得的输出结果。
查看第二个链接以可视化我的“理想”结果。
在理想情况下,我还包括了寻找序列覆盖率的第二个任务。我不知道如何计算彩色或突出显示的字符。
【问题讨论】:
-
“突出显示”是什么意思?您的输出将如何呈现?您是否将其用作终端中的脚本? Jupyter笔记本?网络应用?你试过什么了?判断一个字符串是否是另一个字符串的子字符串并不难。
-
您好 ddejohn,感谢您的回复。我包括了额外的解释和我写的当前代码。