Python对word的处理——Python-docx的尝试
- docx与Python
- 下载安装包Python-docx
- 读文档,找信息
- 首先是调包
- 关于字体和段落
- 关于判断和赋值
- 判断
- 赋值
- 最后贴一下自己的代码
- 参考
docx与Python
最近要背马原,如果要默写的话会效果更好(大概),但是把高亮的词一个一个地弄成空的太费时间了,又不太会写Word自带的宏,就寄希望于Python来批量处理一下。
下载安装包Python-docx
既然是为了提高效率(雾),那么必不可能自己造轮子。在网上查了一下,有人推荐Python-docx包,拿来试一下
由于这个包已经提交给了Pypi,直接用pip就可以安装啦。
pip方式
pip install Python-docx
当然由于网络问题Pypi的源下载不快(慢的要命的好吧x),我推荐清华源安装.
加清华源启动pip
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Python-docx
读文档,找信息
Python-docx的官方文档在这里
虽说有中文文档但是看上去是机翻的……还不如直接看英文呢
根据需求,我需要的是打开我的docx,遍历每个字符然后选出高亮字符,把高亮字符变白(和背景融在一起就看不见了嘛),然后取消高亮,并在这些字符下面加上下划线(有填空题那味了)
首先是调包
和平常的还不太一样,不要想当然地写
import python-docx
其实是
from docx import Document
关于字体和段落
根据文档,段落是Document对象的一个属性
遍历每一段并输出所有字符:
for para in dictation.paragraphs:
print(dictation.text)
众所周知,文字包含在段落中。
继续查阅文档,得到字符对象:Run objects下的Font objects
找到了需要的三个属性:字符颜色color、字符高光颜色highlight_color和下划线属性underline;
其中color对象还包含三个属性,这里只关注颜色属性即color.rgb
从待处理中读取的命令:
dictation.paragraphs[i].runs[j].font.color.rgb # 字符颜色,得到六位十六进制rgb颜色对象
dictation.paragraphs[i].runs[j].font.highlight_color # 高光颜色
dictation.paragraphs[i].runs[j].font.underline # 下划线设定
这里注意,以上三个属性都是这个Python包自己定义的对象,相关的值在docx.enum.text.WD_COLOR_INDEX
中
建议如下调包:
from docx.enum.text import *
关于判断和赋值
判断
可以用双等号,但是颜色一定要按照官方文档来判值,即使用AUTO、YELLOW等,如果按照print打出来的直接写的话会报错(对我是憨憨)
赋值
RGB那里的赋值是不能直接给六位十六进制数字或字符串的(0xFFFFFF),要转换一下,用到了 docx.shared.RGBColor(r, g, b)
或者文档还提供了从字符串转成十六进制的函数 from_string(rgb_hex_str)
不过咱也没用咱也不清楚。
最后贴一下自己的代码
哦还有一个点,underline的颜色好像不能自己设置,会自动变白(就看不见了嘛),还得打开word全选改一下下划线颜色。
def make_dictation(path):
"""
1.path:文件路径,同目录可以使用文件名
2.把docx中所有有底色的文字的颜色全部换为白色,然后把底色换为白色,制作默写文档
3.无返回值,直接将修改后的docx保存
现有不足:
1.高亮仅识别黄色,有时间可以加其他颜色
2.无法添加有颜色的下划线,需要在word中进行二次编辑
"""
dictation = Document(path)
for para in dictation.paragraphs:
for run in para.runs:
if run.font.highlight_color == WD_COLOR_INDEX.YELLOW:
run.font.color.rgb = RGBColor(0xff, 0xff, 0xff)
run.font.highlight_color = WD_COLOR_INDEX.WHITE
run.font.underline = WD_UNDERLINE.SINGLE
print("填空题已生成,请享用。")
dictation.save(path)
参考