Python使用python-docx批量提取Word文档中的图片
本文详细介绍如何利用Python的python-docx库从Word文档中批量提取所有嵌入图片。涵盖环境准备、核心代码编写、安全保存逻辑及常见报错排查,并提供后续图像二次处理的扩展建议,助力开发者高效实现文档内容自动化抓取。
原理与适用场景
Word文档中的图片分为嵌入式(Inline)与浮动式(Floating)。python-docx通过解析XML结构定位图片数据节点,读取二进制流后写入本地磁盘。该方案适用于报告归档、数据可视化素材收集、合同凭证管理以及自动化流水线的图像预处理环节。
第1步:安装依赖环境
操作入口为系统终端或虚拟环境命令行。确保Python版本不低于3.7,执行以下指令拉取官方维护的解析包:
pip install python-docx
完成后可通过import docx无报错即视为环境就绪。
第2步:编写图片提取脚本
目的为遍历文档对象并安全导出二进制数据。将以下代码保存为extract_images.py,修改源文件路径后即可运行:
import docx
import os
def extract_word_images(input_doc, output_dir):
# 自动创建输出目录
os.makedirs(output_dir, exist_ok=True)
# 加载文档对象
doc = docx.Document(input_doc)
extracted_count = 0
# 遍历所有内嵌图形对象
for shape in doc.inline_shapes:
extracted_count += 1
# DOCX内部图片格式多为PNG或JPG,统一以.png后缀保存便于标准化处理
filename = os.path.join(output_dir, f"img_{extracted_count}.png")
with open(filename, "wb") as img_file:
img_file.write(shape.blob)
print(f"提取完成!共保存 {extracted_count} 张图片至目录: {os.path.abspath(output_dir)}")
# 替换为你的实际Word文件名
extract_word_images("source_report.docx", "output_images/")
关键点说明:
- 使用doc.inline_shapes可直接获取段落、表格及形状容器中的所有嵌入图,避免原稿中仅遍历paragraph.runs[0]导致的遗漏。
- 使用shape.blob读取原始字节流,配合os.path.join保障跨平台路径兼容性。
第3步:执行验证与结果核对
运行脚本后,打开指定输出文件夹检查文件列表。正常状态下,提取出的图片可按常规图像查看器打开,分辨率与原档一致。若需核对数量是否匹配,可在Word中使用「审阅」→「统计」查看媒体对象总数,并与控制台打印的计数进行比对。
常见问题排错
AttributeError: 'Document' object has no attribute 'inline_shapes':使用的python-docx版本过低。请升级至最新版pip install --upgrade python-docx。- 提取后的图片无法打开或显示为空白块:部分Word版本会将高压缩率图片存储为临时缓存格式。尝试在Word中将图片另存为高质量模式后重试,或引入
Pillow库对导出文件执行Image.open()强制解码刷新头部。 - 表格内的浮水印未导出:
inline_shapes仅覆盖内嵌对象。若需抓取浮动型文本框或艺术字图片,需额外遍历doc.shapes并进行if shape.has_photo_frame:条件过滤。
总结
通过python-docx的标准API组合,可稳定实现Word多媒体资源的无损剥离。掌握上述路径与参数后,可进一步衔接pandas进行数据清洗,或使用Pillow批量裁剪、加水印及格式转换。以上就是Python使用python-docx批量提取Word文档中的图片的详细内容,更多关于Python办公自动化与文档解析的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









