用 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 里的文字是以图片形式插入的,需要另走图片识别流程,不能指望文本解析库直接读出。

分享到:
上一篇
Excel 解析配置怎么设置:用 Python 读取表格的实操步骤
下一篇
用 Python 配置网页爬取:从安装到抓取第一条数据
1
系统公告

关于香港云优质服务器IP地址更换的通知

尊敬的客户: 因原IP运营商大幅涨价,为避免成本转嫁至用户,我司决定更换IP服务商。本次更换后,您的续费价格将保持不变,且新IP网络质量与服务标准不受影响。新IP已分配至后台,即刻生效(更换的新IP都是香港原生IPv4)。 涉及 IP 段: 45.192.x.x 旧 IP 停用时间: 2026 年 12 月 1 日
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意