Python使用docx库将Word文档中特定关键词后文字设为白色
本文介绍如何利用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))
以上为个人经验分享,希望能为大家提供参考。欢迎大家多多支持本站。如有错误或考虑不周之处,敬请指正。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









