首页/AI/RAG 与向量库速查/python-pptx 解析演示文稿

python-pptx 解析演示文稿

python-pptx 遍历每页幻灯片的文本框与备注,把讲义、培训课件转成文本;备注页常含讲稿内容,对知识库很有价值。

RAG 与向量库速查AI更新于 2026-10-13

python-pptx 能取到什么

python-pptx 直接读 .pptx 的 XML 结构,遍历每页幻灯片的形状(shape),取出文本框、表格与备注页文本。培训课件与宣讲材料的正文通常很短,真正的解释在备注页讲稿里,所以备注必须一并提取。图表里的数值与图片中的文字它读不到,需要另行处理。

基本信息

适用格式Office Open XML 的 .pptx,老式 .ppt 需先转换
读取对象slide.shapes 文本框与表格、slide.notes_slide 备注
页与切片一页幻灯片通常语义完整,可作为默认切片单位
盲区图表数值、图片内文字(需 OCR 或另取数据源)

典型使用场景

  • 培训课件入库:讲义正文配备注讲稿,构成完整的问答语料
  • 产品宣讲材料:把版本发布说明与路线图整理进知识库
  • 会议材料归档:会后把演示文稿转成可检索文本,替代人工整理纪要
  • 一页一切片:按幻灯片切分便于引用时标注页码,用户能回看原页
  • 跨语言素材:外文课件先解析再翻译或直接以原文入库

提取幻灯片文本

提取幻灯片文本
from pptx import Presentation

prs = Presentation("deck.pptx")                          # 打开本地 pptx 文件
for i, slide in enumerate(prs.slides, 1):               # 页码从 1 开始便于引用
    for shape in slide.shapes:
        if shape.has_text_frame and shape.text_frame.text.strip():
            print(i, shape.text_frame.text[:80])        # 正文文本,空文本框跳过
    if slide.has_notes_slide:                           # 备注页常含讲解要点
        print("备注", slide.notes_slide.notes_text_frame.text[:80])

页面对象与提取方式

对象取法注意
文本框shape.has_text_frame先判空再拼接,避免写入空行
表格shape.has_table 逐单元格取值按行列转文本,保留表头
备注页slide.has_notes_slide讲稿内容对问答的价值常高于正文
图表与图片GraphicFrame 与 picture脚本读不到,需另取数据或做 OCR
切片时把页码写进元数据,回答引用可直接标注「第几页」,用户能一键回看原稿;一页内容过长(如整页流程图说明)再按文本框分组二次切分,仍保留同一页码。
批量处理前先抽十几份文件验证:模板差异会导致标题占位符、母版文本出现位置不同,写死形状顺序的脚本很容易漏内容。

易错点

  • 只取正文不取备注,课件里最关键的讲解内容缺失
  • 图表对象(GraphicFrame)里的数据读不到,需单独提取,否则关键数据永远检索不到
  • 文本框遍历顺序不等于视觉顺序,必要时按坐标排序后再拼接
  • 整份演示当一段文本入库,引用无法定位到页,用户核对原稿成本高

数据来源与参考

  • python-pptx 官方文档(python-pptx.readthedocs.io)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌