Python通过python-docx库或手动解压.docx ZIP包来解析其内部XML文件;前者用_element.xml获取段落等原始XML,后者用zipfile+etree/lxml读取document.xml等核心文件,并需正确处理命名空间。

Python本身不直接解析Word文档的底层XML,而是通过python-docx库操作.docx文件——因为.docx本质是ZIP压缩包,内部包含多个XML文件(如document.xml、styles.xml等)。若需访问原始XML数据,有两种主流方式:一是用python-docx间接获取XML片段;二是手动解压.docx并解析目标XML文件。
用python-docx提取段落/表格的XML结构
python-docx虽为高层接口,但每个元素(如Paragraph、Run)都提供_element属性,可直接访问底层lxml Element对象,进而读取或修改其XML。
- 安装依赖:
pip install python-docx lxml - 读取段落XML示例:
from docx import Document <p>doc = Document("example.docx") p = doc.paragraphs[0] # 获取第一个段落 xml_str = p._element.xml # 返回该段落的完整XML字符串(含命名空间) print(xml_str[:200]) # 查看前200字符登录后复制
- 注意:
_element.xml返回的是带namespaces的原始XML,可能含w:前缀(如<p></p>),解析时需处理命名空间或用lxml的XPath配合{http://schemas.openxmlformats.org/wordprocessingml/2006/main}。
手动解压.docx并读取核心XML文件
.docx是ZIP格式,可用Python内置zipfile模块解压,再用xml.etree.ElementTree或lxml解析指定XML。
- 关键XML路径(在解压后目录中):
-
word/document.xml:主文档内容(段落、文字、制表符等) -
word/styles.xml:样式定义 -
word/numbering.xml:编号与项目符号规则 -
word/settings.xml:文档设置
-
- 示例:提取
document.xml中的所有段落文本(忽略格式):import zipfile import xml.etree.ElementTree as ET <p>with zipfile.ZipFile("example.docx") as docx: with docx.open("word/document.xml") as f: tree = ET.parse(f) root = tree.getroot()</p><h1>Word XML默认命名空间</h1><pre class="brush:php;toolbar:false;"> ns = {"w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main"} for p in root.findall(".//w:p", ns): text = "".join(t.text for t in p.findall(".//w:t", ns) if t.text) print(text.strip())登录后复制
<p></p>立即学习“Python免费学习笔记(深入)”;
标签: word python 编码 中文乱码 ai 解压 word文档 常见问题 xml解析 标准库
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~