word文档图片存于word/media/目录,但仅解压zip会丢失位置、格式及特殊布局信息;python-docx无法提取图片,须用zipfile精准读取并按原始扩展名保存。

Word文档里的图片藏在哪?先搞清存储结构
Word(.docx)本质是 ZIP 压缩包,图片不直接存为文件,而是放在 word/media/ 目录下,文件名类似 image1.png、image2.jpeg。但光解压 ZIP 不够——有些图片可能被裁剪、旋转或以“内嵌对象”形式存在(比如图表、公式),这些不会出现在 media/ 里,也不会被简单解压提取出来。
-
.docx必须用二进制模式打开,不能当纯文本读 -
python-docx库完全不支持提取图片,它只处理文字和样式,别白费劲试document.inline_shapes或document.part.related_parts - 真正能拿到所有
media/图片的,是手动解压 + 遍历,或用zipfile模块直读
用 zipfile 直接解压提取最稳,5 行代码搞定
不用装额外库,标准库 zipfile 就够。关键不是“解压整个包”,而是精准定位 word/media/ 下的文件,并按原始扩展名保存(注意:后缀可能和实际格式不一致,比如 image3.emf 实际是 Windows 元文件,不能当 PNG 打开)。
import zipfile
import os
<p>docx_path = "report.docx"
with zipfile.ZipFile(docx_path) as doc:
for name in doc.namelist():
if name.startswith("word/media/"):
data = doc.read(name)
ext = os.path.splitext(name)[1]
output<em>name = f"extracted</em>{os.path.basename(name)}"
with open(output_name, "wb") as f:
f.write(data)</p>
-
namelist()返回所有内部路径,必须用startswith("word/media/")过滤,不能只靠后缀(因为header.xml也可能带.png) -
os.path.splitext(name)[1]取的是 ZIP 内原始文件名后缀,不是 MIME 类型,所以image4.wmf就该保留为 .wmf,别硬改成 .png - 如果目标是批量处理多个文件,把上面逻辑包进函数,用
glob.glob("*.docx")遍历即可
遇到 EMF/WMF 图片打不开?这不是提取失败,是格式问题
Windows 专用图元文件(.emf、.wmf)在 macOS/Linux 上默认无法预览,Python 用 PIL.Image.open() 也会报 OSError: cannot identify image file。这不是你代码错了,是格式本身跨平台支持弱。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 别尝试用
pillow强转,它不支持 EMF 解码(截至 v10.3.0) - 真需要转成 PNG/JPEG,得调用系统工具:Windows 上可用
inkscape或 PowerShell 的Convert-EmfToPng;macOS/Linux 可用libwmf或convert(ImageMagick),但需提前安装 - 更现实的做法:提取时原样保存,加个日志说明 “
image5.emf已提取,需 Windows 环境查看或转换”
为什么 docx 转 PDF 再 OCR 提图是条死路?
有人想绕过 ZIP 解压,走“转 PDF → 用 pdfplumber 或 PyMuPDF 提图”路线,结果发现:
- Word 里插入的截图、形状组合图、Excel 图表,在 PDF 中常被转成矢量路径或不可分离图层,
page.get_images()返回空列表 - 表格内嵌图、文本框里的图,PDF 提取成功率低于 30%
- OCR(如
pytesseract)只能识别图中文字,不能还原原始图片像素
这条路不仅慢(每份 docx 多一次 PDF 渲染)、失真(压缩/重采样)、还漏图严重,纯属增加复杂度。
真正要保真提取,就老实用 zipfile 读 word/media/。其它方案要么丢图,要么换格式,要么依赖桌面环境——而这些恰恰是你一开始想绕开的麻烦。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










