全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何用Python解析Word文档(.docx)中的XML数据

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

Python本身不直接解析Word文档的底层XML,而是通过python-docx库操作.docx文件——因为.docx本质是ZIP压缩包,内部包含多个XML文件(如document.xmlstyles.xml等)。若需访问原始XML数据,有两种主流方式:一是用python-docx间接获取XML片段;二是手动解压.docx并解析目标XML文件。

用python-docx提取段落/表格的XML结构

python-docx虽为高层接口,但每个元素(如ParagraphRun)都提供_element属性,可直接访问底层lxml Element对象,进而读取或修改其XML。

  • 安装依赖:pip install python-docx lxml
  • 读取段落XML示例:
    from docx import Document
    

    doc = Document("example.docx") p = doc.paragraphs[0] # 获取第一个段落 xml_str = p._element.xml # 返回该段落的完整XML字符串(含命名空间) print(xml_str[:200]) # 查看前200字符

  • 注意:_element.xml返回的是带namespaces的原始XML,可能含w:前缀(如

    ),解析时需处理命名空间或用lxml的XPath配合{http://schemas.openxmlformats.org/wordprocessingml/2006/main}

手动解压.docx并读取核心XML文件

.docx是ZIP格式,可用Python内置zipfile模块解压,再用xml.etree.ElementTreelxml解析指定XML。

  • 关键XML路径(在解压后目录中):
    • word/document.xml:主文档内容(段落、文字、制表符等)
    • word/styles.xml:样式定义
    • word/numbering.xml:编号与项目符号规则
    • word/settings.xml:文档设置
  • 示例:提取document.xml中的所有段落文本(忽略格式):
    import zipfile
    import xml.etree.ElementTree as ET
    

    with zipfile.ZipFile("example.docx") as docx: with docx.open("word/document.xml") as f: tree = ET.parse(f) root = tree.getroot()

    Word XML默认命名空间

        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())

用lxml做深度XML分析(推荐用于复杂需求)

当需XPath查询、命名空间灵活处理、或修改后重新打包时,lxml比标准库更强大。

  • 安装:pip install lxml
  • 读取并查询带样式的段落:
    from lxml import etree
    import zipfile
    

    with zipfile.ZipFile("example.docx") as docx: with docx.open("word/document.xml") as f: tree = etree.parse(f)

    使用XPath查找所有应用了"Heading1"样式的段落

        ns = {"w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main"}
        headings = tree.xpath("//w:p[w:pPr/w:pStyle[@w:val='Heading1']]", namespaces=ns)
        for h in headings:
            text = "".join(h.xpath(".//w:t/text()", namespaces=ns))
            print("标题:", text.strip())

  • 修改XML后,可调用tree.write()保存,并用zipfile重建.docx(需保留其他文件结构)。

注意事项与常见问题

直接操作XML有风险,务必备份原文件;且Word生成的XML结构较复杂,嵌套深、命名空间多。

  • 命名空间必须匹配:OpenXML规范强制使用w:等前缀,XPath或find操作必须声明对应URI,否则查不到节点。
  • 中文乱码?XML本身是UTF-8编码,zipfile.open()返回bytes,etree.parse()lxml.etree.parse()能自动识别,无需手动decode。
  • 图片、页眉页脚在哪?图片存在word/media/,页眉页脚在word/header.xml/footer.xml,需单独解压读取。
  • 不建议从零构建.docx:手动拼XML易出错,优先用python-docx生成,仅在特殊分析场景才深入XML层。


# word  # python  # 编码  # 中文乱码  # ai  # 解压  # word文档  # 常见问题  # xml解析  # 标准库 


相关文章: 北京专业网站制作设计师招聘,北京白云观官方网站?  ,有什么在线背英语单词效率比较高的网站?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  建站10G流量真的够用吗?如何应对访问高峰?  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何通过万网虚拟主机快速搭建网站?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  长沙做网站要多少钱,长沙国安网络怎么样?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  活动邀请函制作网站有哪些,活动邀请函文案?  如何选择美橙互联多站合一建站方案?  XML的“混合内容”是什么 怎么用DTD或XSD定义  建站主机选购指南:核心配置与性价比推荐解析  如何通过西部建站助手安装IIS服务器?  c# 在高并发场景下,委托和接口调用的性能对比  如何快速搭建高效WAP手机网站?  如何快速登录WAP自助建站平台?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  建站之星导航如何优化提升用户体验?  建站主机无法访问?如何排查域名与服务器问题  三星网站视频制作教程下载,三星w23网页如何全屏?  如何在阿里云ECS服务器部署织梦CMS网站?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  如何快速搭建高效可靠的建站解决方案?  湖北网站制作公司有哪些,湖北清能集团官网?  如何在香港免费服务器上快速搭建网站?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  建站主机选哪家性价比最高?  建站之星安装需要哪些步骤及注意事项?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何在Windows服务器上快速搭建网站?  ,柠檬视频怎样兑换vip?  建站之星如何优化SEO以实现高效排名?  建站之星2.7模板快速切换与批量管理功能操作指南  已有域名如何免费搭建网站?  如何在橙子建站上传落地页?操作指南详解  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  家庭建站与云服务器建站,如何选择更优?  外贸公司网站制作哪家好,maersk船公司官网?  宝塔建站助手安装配置与建站模板使用全流程解析  清除minerd进程的简单方法  定制建站方案优化指南:企业官网开发与建站费用解析  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  网站制作公司排行榜,四大门户网站排名?  如何通过IIS搭建网站并配置访问权限?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。