python-docx读取word段落的样式字体

python-docx读取word字体信息为None

记录一下使用python-docx吧。
最近使用python-docx读取docx文件,想要读取文件的字体等信息。查到的资料有点杂,而且好多都是教你怎么写入一个docx文件的……
官方文档中说了关于样式继承的问题:

一个样式可以从另一个样式继承属性,有点类似于层叠样式表 (CSS) 的工作方式。base_style使用属性指定继承 。通过将一种风格建立在另一种风格上,可以形成任意深度的继承层次结构。没有基本样式的样式会从文档默认值继承属性。

许多字体属性是三态的,这意味着它们可以采用值 True、False和None。True表示该属性是“on”,False表示它是“off”。从概念上讲,None价值意味着“继承”。

也就是说,当文档中某些内容应用了样式时,一些信息返回的值为None。
接下来讲一下文档应用了样式,怎么得到paragraphs的字体信息。

首先,安装库:

在终端输入:(网速慢建议使用镜像源)

pip install python-docx
# 豆瓣镜像源
# pip install -i https://pypi.doubanio.com/simple python-docx

使用

加载相应的库

import docx
from docx.oxml import parse_xml
from docx.oxml.xmlchemy import serialize_for_reading
from docx.oxml.ns import nsmap, qn

# 读取docx文件
doc = docx.Document('test.docx')

将docx文件解析为xml文件,通过xml文件获取文档信息。文档解析后会有多个xml文件,一般是document.xml中获取文档信息,样式信息则会在style.xml中。因此可以通过解析样式信息来获取字体信息。
p.style.font.name有时也可以获取样式的英文字体名称。

获取中文字体名称

for p in doc.paragraphs:
#     print("段落内容:", p.text)
    print("段落样式名称:", p.style.name)
    print('常规手段字体名称:', p.style.font.name)
    p_rpr = p.style.element.xpath('w:rPr')[0]
    # print(p_rpr[0].xml)
    if p_rpr.xpath('w:rFonts'):
        try:
        # 一般字体在w:ascii中,中文样式的字体可能在w:eastAsia
        # 找不到的话print一下p_rpr[0].xml找找关于字体信息在哪
            print("段落字体:", p_rpr.xpath('w:rFonts')[0].attrib[qn("w:eastAsia")])
        except:
            print("段落字体:", p_rpr.xpath('w:rFonts')[0].attrib[qn("w:ascii")])

得到的结果:
在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值