当前位置: 首页 > news >正文

DOCX本质

一、DOCX 本质是 ZIP

.docx 不是单一二进制文件,而是 Office Open XML(OOXML) 格式:一个改了扩展名的 ZIP 压缩包。

.docx 改成 .zip 再解压,或直接当 ZIP 读,会看到类似结构:

需要提取变量.docx (ZIP)
├── [Content_Types].xml # 各文件的类型说明
├── _rels/.rels # 包级关系
├── docProps/ # 文档属性(作者、创建时间等)
│ ├── app.xml
│ └── core.xml
└── word/ # Word 正文相关
├── document.xml # ★ 正文内容(文字、段落、图片引用)
├── document.xml.rels # 正文里图片等资源的关系
├── media/ # ★ 嵌入的图片
│ ├── image1.png
│ ├── image2.png
│ └── ...
├── styles.xml # 样式
└── settings.xml # 设置

和 Word 界面的对应关系:

你在 Word 里看到的ZIP 里实际存放的位置
文字段落
word/document.xml
插入的图片
word/media/image1.png
图片在文档中的位置
document.xml<w:drawing> 引用图片

所以 Python 可以这样读,不需要安装 Word:

import zipfile
with zipfile.ZipFile("需要提取变量.docx") as zf:
xml = zf.read("word/document.xml") # 读正文
img = zf.read("word/media/image1.png") # 读图片

二、正文在 word/document.xml

Word 不会把“一整段纯文本”存进去,而是用 XML 树 描述文档结构。

你文档里第一段文字,在 XML 里大致是这样(已格式化便于阅读):

<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p> <!-- p = paragraph 段落 -->
<w:r> <!-- r = run 一段连续文字 -->
<w:t>年均职工人数</w:t> <!-- t = text 实际文字 -->
</w:r>
<w:r>
<w:t> qt_npjzgs f435</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>年初职工人数 qt_nczgs f436 f391</w:t>
</w:r>
</w:p>
...
<w:p>
<w:r>
<w:drawing>...</w:drawing> <!-- 图片,不是文字 -->
</w:r>
</w:p>
</w:body>
</w:document>

层级关系:

document(文档)
└── body(正文区)
└── p(段落)
└── r(文字块,可设不同字体/颜色)
└── t(真正显示的文本)

对你这份文档的意义:

  • 前半部分变量(如 qt_npjzgsf435)在 <w:t> 里 → 可以直接用代码提取
  • 后半部分变量在截图里 → XML 里只有 <w:drawing> 指向 image1.png 等 → 必须读图片或 OCR

脚本里的提取逻辑就是遍历所有 w:t 节点:

for node in root.iter(f"{W_NS}t"):
if node.text:
parts.append(node.text)

三、XML 命名空间是什么?

问题从哪来?

XML 里标签名可以重复。比如:

  • Word 用 <p> 表示段落
  • 别的标准也可能用 <p> 表示别的含义

如果混在一起,解析器无法区分。

解决办法:命名空间(Namespace)

给每套标准一个 全球唯一的 ID,标签写成 前缀:标签名,前缀在文件开头绑定到某个 URI:

xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"

含义是:

  • 前缀 w → 绑定到 Word 主命名空间
  • <w:p> = Word 的段落
  • <w:t> = Word 的文本
  • <wp:inline> = 另一个命名空间(Drawing,用于图片布局)

你文件开头实际声明了多个命名空间:

前缀用途
w
Word 正文(段落、文字)
wp
图片在页面上的位置
pic
图片本身
r
资源关系(如图片 ID 对应哪个 png)

为什么 URI 长得像网址?

http://schemas.openxmlformats.org/... 只是唯一标识符,不是要去访问的网址。
可以把它理解成“这套标签的身份证号”,不会联网。

Python 里为什么要写 W_NS

ElementTree 解析 XML 时,标签名是 带命名空间的完整名,不是简单的 t,而是:

{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t

所以代码里写:

W_NS = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}"
root.iter(f"{W_NS}t") # 查找所有 w:t 文本节点

如果写成 root.iter("t"),会找不到任何节点,因为实际标签名不是 t


四、整体流程串起来

需要提取变量.docx
▼ zipfile 解压
┌───────────────────┐
│ word/document.xml │ ──► 解析 XML ──► 找 w:t ──► 正则提取变量名
└───────────────────┘ (W_NS + t)
┌───────────────────┐
│ word/media/*.png │ ──► 图片里的变量名(需 OCR 或人工核对)
└───────────────────┘
variables.txt(105 个变量)

五、一句话总结

概念含义
DOCX = ZIP
文档是多个 XML + 图片等文件的压缩包
document.xml
存段落、文字、图片引用,是正文的核心
w:t
真正可见的文字内容
XML 命名空间
区分不同标准的标签,避免重名;http://... 只是 ID,不联网
W_NS
Python 查找 w:t 时必须用的完整命名空间前缀

如果你愿意,我可以再单独讲 document.xml.relsrId4 如何对应到 image1.png 这条引用链。

http://www.jsqmd.com/news/1013270/

相关文章:

  • 苏州黄金回收怎么卖高价?实测5家靠谱小店,这份避坑指南请收好 - 速递信息
  • BiliRaffle:2025年B站UP主必备的动态抽奖神器
  • ComfyUI-LTXVideo:专业级AI视频生成的技术架构与实战优化指南
  • 2026 年 6 月周口高温季空调维修避坑指南 线路老化与家电故障正规服务商甄选 - 金修达家庭维修
  • Awesome-Dify-Workflow终极指南:快速构建AI工作流的完整教程
  • 2026 义乌注册公司推荐榜|第三方实测:口碑好、合规稳、效率高 - 速递信息
  • 2026年南京黄金回收严选测评榜:6家门店资质认证和实地对比丨称重校准和结算注意事项 - 生活测评君
  • 杭州奢侈品钻石首饰黄金回收本地实体,高价回收卡地亚梵克雅宝宝格丽珠宝 - 讯息早知道
  • Web Animations API 深度实践:从关键帧到时序控制的浏览器原生动画引擎
  • java数字电路模拟4-6作业集blog总结
  • Umi-CUT批量图片处理终极指南:5分钟学会智能去黑边与裁剪
  • 美妆成分争议舆情监测:三维协同预警机制建设
  • 开源RGB统一控制终极指南:告别多软件混乱,一个工具管理所有灯光
  • 深入解析MPC8306 DDR控制器:从JEDEC协议到寄存器配置实战
  • 天津水电维修服务推荐、2026正规水电维修公司上门收费标准 - 我叫一
  • MPC8272 SCC模块UART与HDLC模式深度解析与实战配置
  • Yuzu模拟器终极安装指南:3分钟学会版本管理与一键部署方案
  • 终极指南:三步搞定老Mac升级最新macOS系统,让旧设备重获新生
  • 2025年B站UP主必备:BiliRaffle高效抽奖工具完整解决方案
  • Windows安卓应用安装神器:APK-Installer终极完整指南
  • 长沙除甲醛公司六大品牌深度解析 直营加盟模式价值对比 - GEORANK
  • 3000+戴森球计划蓝图库:让工厂设计从痛苦到享受的转变指南
  • 层次聚类原理与实战:从树状图理解数据天然分组
  • PowerQUICC II总线优化:对齐访问、端口配置与数据流模式详解
  • 崩坏3一键扫码登录:告别繁琐密码,3分钟搞定9大渠道服登录难题
  • 5分钟掌握Dify工作流秘籍:零代码打造小红书爆款卡片神器
  • 全国除甲醛公司全景洞察:直营与加盟模式博弈及优选逻辑 - GEORANK
  • GTA5线上小助手:如何免费解锁洛圣都的无限可能?
  • 如何用Mac Mouse Fix彻底解决macOS鼠标体验难题:5个场景化配置方案
  • 如何高效使用HashCheck:Windows文件校验加速工具的专业指南