Python对word的处理——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的官方文档在这里

https://python-docx.readthedocs.io/en/latest/

虽说有中文文档但是看上去是机翻的……还不如直接看英文呢

根据需求,我需要的是打开我的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 *
关于判断和赋值
判断

可以用双等号,但是颜色一定要按照官方文档来判值,即使用AUTOYELLOW等,如果按照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)

参考

https://python-docx.readthedocs.io/en/latest/
https://www.cnblogs.com/gdjlc/p/11407587.html
https://www.cnblogs.com/z123zero/archive/2019/04/25/10770097.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值