如何使用Python在TXT或RTF文件中实现关键词彩色高亮标注
实现方案说明
首先明确:纯文本(.txt)本身不内置格式存储能力,无法在常规文本编辑器中直接显示颜色。你可以根据使用场景二选一:
- 仅在终端/支持ANSI转义码的程序中查看:输出带ANSI控制字符的txt文件
- 需要在Word/系统记事本等通用编辑器中看到高亮效果:输出RTF格式文件
方案1:输出带ANSI高亮的TXT文件
适用场景:仅在终端、VS Code等支持ANSI转义的工具中查看内容
直接用转义码包裹匹配到的关键词即可,示例代码:
import re def highlight_keywords_in_txt(input_path, output_path, keywords, highlight_color='\033[93m\033[101m'): # 默认高亮样式:黄字红底,可自行修改ANSI码调整颜色 reset_format = '\033[0m' # 读取原文件内容 with open(input_path, 'r', encoding='utf-8') as f: content = f.read() # 正则匹配所有关键词,不区分大小写可加re.IGNORECASE参数 pattern = re.compile('|'.join(re.escape(k) for k in keywords)) highlighted_content = pattern.sub(lambda match: f"{highlight_color}{match.group()}{reset_format}", content) # 写入新文件 with open(output_path, 'w', encoding='utf-8') as f: f.write(highlighted_content) # 调用示例 if __name__ == "__main__": # 替换为你的实际文件路径、需要高亮的关键词 highlight_keywords_in_txt( input_path="原文件.txt", output_path="高亮后.txt", keywords=["目标词1", "目标词2", "目标词3"] )
注:该方案生成的txt在普通Windows记事本中打开会显示乱码字符,仅支持ANSI转义的工具可正常显示高亮效果
方案2:输出带高亮的RTF文件(通用推荐)
RTF格式原生支持颜色、高亮等样式,所有主流文本/办公编辑器都可以正常识别显示效果,不需要第三方依赖,直接拼接RTF格式标记即可实现,示例代码:
import re def highlight_keywords_to_rtf(input_txt_path, output_rtf_path, keywords, highlight_rgb=(255,255,0)): # 默认高亮颜色为黄色,可自行修改RGB值调整高亮色 r, g, b = highlight_rgb # RTF文件头定义:声明编码、颜色表 rtf_header = rf'''{{\rtf1\ansi\deff0 {{\colortbl;\red{r}\green{g}\blue{b};}} ''' rtf_footer = '}' # 读取原TXT内容,转义RTF特殊字符 with open(input_txt_path, 'r', encoding='utf-8') as f: content = f.read() # 转义RTF保留字符 content = content.replace('\\', '\\\\').replace('{', '\\{').replace('}', '\\}').replace('\n', '\\par\n') # 正则匹配关键词 pattern = re.compile('|'.join(re.escape(k) for k in keywords)) # 给匹配到的关键词加高亮标记 highlighted_content = pattern.sub(lambda match: rf'\cb1 {match.group()}\cb0 ', content) # 拼接完整RTF内容 full_rtf = rtf_header + highlighted_content + rtf_footer # 写入RTF文件 with open(output_rtf_path, 'w', encoding='utf-8') as f: f.write(full_rtf) # 调用示例 if __name__ == "__main__": highlight_keywords_to_rtf( input_txt_path="原文件.txt", output_rtf_path="高亮结果.rtf", keywords=["目标词1", "目标词2", "目标词3"], highlight_rgb=(255,200,200) # 这里可以自定义高亮的RGB颜色 )
该方案兼容性最好,生成的RTF文件可以在Windows记事本、Word、WPS等所有常用软件中正常显示高亮效果,不需要额外安装依赖,兼容Python3.9.7版本
内容的提问来源于stack exchange,提问作者Pablo Carrero Garcia
相关产品推荐
相关产品推荐

