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 |
切片时把页码写进元数据,回答引用可直接标注「第几页」,用户能一键回看原稿;一页内容过长(如整页流程图说明)再按文本框分组二次切分,仍保留同一页码。
批量处理前先抽十几份文件验证:模板差异会导致标题占位符、母版文本出现位置不同,写死形状顺序的脚本很容易漏内容。