用 Python 解析 PPT 文件:python-pptx 环境配置与文本提取实操
PPT 文件里的文字并不像纯文本那样直接可读,它分散在幻灯片、形状、占位符和表格中。
用 Python 做 PPT 解析配置,核心是安装 python-pptx,按“演示文稿 → 幻灯片 → 形状 → 文本框”的顺序逐层读取。
下面从零给出可运行步骤,也说明容易踩的坑。
环境准备与安装
python-pptx 是读写 .pptx 文件的常用库,但不能解析老式 .ppt 文件。
如果来源文件是 .ppt,需要先用 PowerPoint 或 LibreOffice 另存为 .pptx,否则安装再多库也读不了。
建议使用 Python 3.8 及以上版本,并单独建虚拟环境,避免污染系统包:
python3 -m venv ppt-env
source ppt-env/bin/activate
pip install python-pptx
Windows 下激活命令是 ppt-env\Scripts\activate。
安装完成后用下面一行确认版本:
python -c "import pptx; print(pptx.__version__)"
能打印出版本号即表示库可用。
如果 pip 提示找不到包,先检查 pip -V 对应的 Python 是否与运行代码的解释器一致。
读取第一页文本的最小代码
先准备一个测试文件,例如 demo.pptx,确保里面至少有一页带文本框。
下面代码会打开文件、遍历所有幻灯片,打印每个形状的文本:
from pptx import Presentation
prs = Presentation("demo.pptx")
for page_no, slide in enumerate(prs.slides, start=1):
for shape in slide.shapes:
if shape.has_text_frame:
text = shape.text_frame.text.strip()
if text:
print(f"第{page_no}页: {text}")
这段代码的关键判断是 shape.has_text_frame。
不是所有形状都带文本框,图片、线条、图表等直接访问 text_frame 会报错。
加这个判断后,只处理真正有文字的形状。
如果执行后没有输出,先确认文件路径正确、文件确实是 .pptx,再检查文字是否放在表格或组合形状里——这两类不会被上面的简单遍历完整覆盖。
处理占位符、表格和组合形状
实际 PPT 里,标题和正文常放在占位符中,占位符本身也有 text_frame,所以上一段代码通常能读到。
真正容易漏的是表格和组合形状。
表格需要单独判断 shape.has_table,再遍历单元格:
if shape.has_table:
for row in shape.table.rows:
for cell in row.cells:
print(cell.text)
组合形状需要递归展开。python-pptx 提供 shape.shape_type,
组合类型下可访问子形状,
但不同版本行为略有差异,
建议先用 print(shape.shape_type) 观察实际类型,
再决定是否递归。
另一个细节是空文本框和换行。text_frame.text 会把段落合并成一个字符串,
如果业务需要保留段落,
应遍历 text_frame.paragraphs 和 paragraph.runs,
按段落输出,
而不是直接取整段文本。
常见报错与排查
遇到 PackageNotFoundError,
通常不是 Python 问题,
而是文件扩展名与实际格式不符:
把 .ppt 改名成 .pptx 并不会转换格式,
需要用办公软件重新另存。
遇到中文乱码,
先确认文件本身在 PowerPoint 里显示正常;python-pptx 按 XML 读取文本,
一般不引入编码问题,
乱码多来自终端输出编码,
可把结果写入 UTF-8 文件再查看:
with open("out.txt", "w", encoding="utf-8") as f:
f.write(text)
如果解析速度慢,原因通常是文件包含大量高清图片或嵌入对象,文本提取本身开销不大。
批量处理时建议逐文件捕获异常,避免一个损坏文件中断整个任务。
验证提取结果是否完整
验证不要只看有没有输出,而要做数量对照:在 PowerPoint 里随机选 3 页,人工数出文本框数量,与代码打印的条数比较。
更稳妥的做法是把每页文本导出为一行,检查页数和总字符数是否合理。
对于需要后续入库的场景,建议输出结构化字段:页码、形状名称、文本内容。
这样即使某页漏读,也能快速定位是形状类型没覆盖,还是文件本身没有文字。
最后提醒:python-pptx 适合提取 .pptx 中的文本和表格,不负责 OCR。
如果 PPT 里的文字是以图片形式插入的,需要另走图片识别流程,不能指望文本解析库直接读出。