Python Word提取文档中图片教程
用python-docx把Word文档里嵌入的所有图片批量提取出来保存为本地文件,支持jpg/png等格式,适合从合同、报告、手册中收集配图素材。
场景痛点
一份Word报告里有几十张配图,需要把这些图片单独拿出来用在PPT、公众号、其他文档里。手动右键每张图片另存为,几十张图点几十次,还要手动命名。用python-docx可以一键把docx里所有图片批量导出到文件夹,按顺序命名,几秒搞定,不管图片藏在正文、表格还是页眉页脚里。
用到的库
pip install python-docx
完整代码
# 导入库
import zipfile
import os
import shutil
def extract_images_from_docx(docx_path, output_dir):
"""
从docx中提取所有图片
docx本质是zip包,图片都在word/media/目录下
"""
os.makedirs(output_dir, exist_ok=True)
# docx本质是zip压缩包,直接解压读取
with zipfile.ZipFile(docx_path, 'r') as z:
# 列出所有文件
all_files = z.namelist()
# 筛选出word/media/下的图片文件
image_files = [
f for f in all_files
if f.startswith('word/media/')
]
print(f'在文档中发现 {len(image_files)} 个图片文件')
# 逐个解压保存
for idx, image_path in enumerate(image_files, start=1):
# 获取原始文件名和扩展名
filename = os.path.basename(image_path)
# 统一重命名:image_001.xxx
ext = os.path.splitext(filename)[1]
save_name = f'image_{idx:03d}{ext}'
save_path = os.path.join(output_dir, save_name)
# 读取图片数据并写入
with z.open(image_path) as source:
with open(save_path, 'wb') as target:
shutil.copyfileobj(source, target)
print(f'已提取:{save_name}')
print(f'\n全部完成,图片保存在:{output_dir}')
if __name__ == '__main__':
extract_images_from_docx(
docx_path='带图片的文档.docx',
output_dir='./提取的图片'
)
代码讲解
- docx文件本质上是一个zip压缩包,里面所有内容都是XML和资源文件。图片统一存在
word/media/目录下,文件名通常是image1.png、image2.jpeg这种自动生成的名字。 - 用Python标准库
zipfile直接打开docx,遍历文件列表筛选word/media/开头的路径,就是所有嵌入的图片。 - 提取出来的图片统一重命名为
image_001.jpg、image_002.png这种顺序编号,方便后续查找使用。 - 用
shutil.copyfileobj把图片数据从zip包拷贝到本地文件,二进制读写保证图片不损坏。 - 这个方法比用python-docx遍历run更彻底,不管图片插在正文、表格、页眉页脚、文本框里,只要在docx包里都能提取出来。
运行结果
运行脚本后,在当前目录生成./提取的图片文件夹,里面按顺序保存了Word文档里所有图片文件。图片格式保持原始格式(jpg、png、gif等),文件名按文档中出现顺序编号,打开就能看,画质和文档里完全一致。
注意事项
- 这个方法用的是zipfile标准库,不需要额外安装python-docx也能跑,是最轻量的图片提取方案。
- 提取出来的图片顺序不一定和文档中出现的视觉顺序完全一致,因为zip包里的文件列表是按存储顺序,不是按引用顺序。如果要按出现顺序提取,需要解析document.xml里的图片引用关系。
- 有些图片可能被压缩过,提取出来的分辨率就是文档里嵌入的分辨率,不是原始高清图。
- 如果图片在页眉页脚里,也会被一起提取,因为它们也存在media目录下。

更新时间:2026-09-15 08:53:29
上一篇:Python Word批量提取所有表格汇总到Excel