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

本文介绍了如何使用python-docx库读取Word文档的字体信息,重点讲解了遇到None值的情况,并提供了通过解析document.xml和style.xml获取字体名称的详细步骤,包括中英文字体的处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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")])

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

<think>好的,我现在需要帮助用户解决如何使用python-docx读取Word文档内容的问题。首先,我得回顾一下用户提供的引用资料,确保回答准确。根据引用[3]和[4],python-docx主要用于处理.docx文件,而传统的.doc文件可能需要其他库。用户明确提到使用python-docx,所以应该专注于处理.docx文件的情况。 接下来,用户需要示例代码。根据引用[2],打开文档的方法是使用Document('example.docx'),然后遍历段落。引用[4]中的示例代码也提到导入Document和Inches,但用户可能不需要处理图片,所以可以简化代码。 我需要分步骤说明如何安装库、读取文档内容,包括段落、表格和样式。同时,要提醒用户注意文件路径和扩展名的问题,因为引用[3]指出python-docx只支持.docx。此外,处理表格需要遍历行和单元格,这部分需要详细说明。 可能的问题点:用户是否可能遇到旧版.doc文件?这时候需要提示他们使用其他库如pywin32。同时,代码示例中的异常处理是否需要添加?用户的问题没有提到错误处理,所以可能保持代码简洁更好,但可以提到文件存在性检查。 最后,确保回答结构清晰,步骤明确,代码可运行。检查引用是否正确,例如引用[2]对应遍历段落,引用[3]和[4]对应库的基本用法。然后根据用户要求生成相关问题,比如处理表格、样式修改或图片读取,这些都在引用中有涉及。</think>以下是使用`python-docx`读取Word文档内容的步骤及示例代码: --- ### **1. 安装python-docx库** ```bash pip install python-docx ``` --- ### **2. 读取文档中的段落** ```python from docx import Document # 打开Word文档(注意:仅支持.docx格式) doc = Document('example.docx') # 替换为实际文件路径[^2] # 遍历所有段落并打印内容 for paragraph in doc.paragraphs: print(paragraph.text) ``` **说明**: - `Document('example.docx')` 加载指定路径的Word文档[^3] - `doc.paragraphs` 返回文档中所有段落的集合 --- ### **3. 读取文档中的表格** ```python # 遍历所有表格 for table in doc.tables: for row in table.rows: # 遍历表格的每一行 row_data = [cell.text for cell in row.cells] print(row_data) ``` **说明**: - `doc.tables` 返回文档中所有表格的集合 - 表格按行(`rows`)和单元格(`cells`)逐级解析[^1] --- ### **4. 读取页眉/页脚** ```python section = doc.sections[0] # 获取文档第一节 header = section.header footer = section.footer # 打印页眉内容 for paragraph in header.paragraphs: print("页眉:", paragraph.text) # 打印页脚内容 for paragraph in footer.paragraphs: print("页脚:", paragraph.text) ``` --- ### **注意事项** 1. **文件格式限制**:`python-docx`仅支持`.docx`格式,旧版`.doc`文件需用其他库(如`pywin32`)处理 2. **样式信息**:可通过`paragraph.runs`获取段落中不同样式的文本片段 3. **图片读取**:需用`paragraph._element.xpath('.//pic:pic')`解析图片(较复杂,建议结合PIL库)[^1] ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值