Python使用docx库将Word文档中特定关键词后文字设为白色

Nora
Nora
发布时间:2026-10-15 | 4人浏览过
原创

本文介绍如何利用Python的docx库处理Word题库文件,通过将题目下方的“答案”关键词及其后续文字字体颜色设置为白色来隐藏答案,复习时再配合背景色高亮显示。文章提供了从TXT读取数据并写入Word的完整代码示例,包括单关键词和多关键词的处理逻辑,帮助开发者解决题库复习干扰问题。

需求:

在整理Word题库时,发现答案直接显示在题目下方,这会干扰正常的复习效果。为了解决这个问题,可以将答案部分的字体颜色设置为白色,使其在默认视图下不可见。在需要查看答案时,只需将答案区域的背景色刷黑,即可清晰显示内容。

转换需求:

具体操作目标为:在Word文档中定位关键字“答案”,并将该关键字之后的所有文本信息颜色修改为白色。

由于初次使用库,直接按上述思路实现较为繁琐。因此调整了实现思路:先将题库内容保存为TXT格式,逐条读取后存入新的Word文档。利用字符串分割函数以关键字为界进行拆分,将关键字后的内容(即答案)设置为白色字体。虽然生成了新文件,但最终效果与原需求一致。

实现代码:


import os
import re
import docx
from docx.shared import RGBColor#设置字体
from docx import Document
from docx.shared import Pt#设置字体
from docx.oxml.ns import qn#设置中文字体
f = open("test.txt","r")#将文档和python放在一个目录下无需复杂的路径
i=0
document = Document()#新建word
p = document.add_paragraph('')#新建段落,这句话放在循环外面可以减少空行
while i<3190:
	content = f.readline()
	#print(content)
	
	if content.find('答案')!=-1: #如果该行有关键字“答案”就以关键字为分界进行分割
		pt = r'(答案)'
		res = re.split(pt, content)#分割
		#print(res[0],end=' ')
		#print(res[1],end=' ')
		#print(res[2])
		
		#add_run在同一段添加内容
		run = p.add_run(res[0])#输入关键字之前的字符
		run.font.name=u'宋体' #设置插入的字体
		run.font.size = Pt(15)
		r = run._element
		r.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
		run = p.add_run(res[1])#输入关键字
		run.font.name=u'宋体' #设置插入的字体
		run.font.size = Pt(15)
		r = run._element
		r.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
		run = p.add_run(res[2])#输入关键字之后的字符
		run.font.name=u'宋体' #设置插入的字体
		run.font.size = Pt(15)
		r = run._element
		r.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
		#设置关键字之后也就是答案的字体颜色,这里设置为白色
		run.font.color.rgb = RGBColor(250,250,250)
	else:
		run = p.add_run(content)#如果该行没有关键字“答案”则直接输入word
		#print(content)
		run.font.name=u'宋体' #设置插入的字体
		run.font.size = Pt(15)
		r = run._element
		r.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
	i+=1
document.save('路线1.docx')#关闭保存word
f.close() #关闭TXT

虽然需求本身并不复杂,但由于初次接触库,中间经历了一些尝试和弯路,特此记录以便后续参考。

补充:如果文档中存在多个需要处理的关键字,可以使用以下代码进行批量处理。


for one_key in keys:
 if content.find(one_key) != -1:
  p = document.add_paragraph()
  pt = r'({})'.format(one_key)
  res = re.split(pt, content)
  for one_split in res:
   run = p.add_run(one_split)
   run.font.name = u'宋体'
   r = run._element
   r.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
   if one_split == one_key:
    run.font.color.rgb = RGBColor(220, 20, 60)
    run.font.bold = True
  break
else:
 p = document.add_paragraph(u'{}'.format(content))

以上为个人经验分享,希望能为大家提供参考。欢迎大家多多支持本站。如有错误或考虑不周之处,敬请指正。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表