Python制作一个PPT文本提取工具
作者:winfredzhang
这篇文章主要为大家详细介绍了如何使用Python开发一个带图形界面的PPT文本提取工具,可以从PPTX文件中提取所有文本内容,有需要的小伙伴可以了解下
在日常工作中,我们经常需要从PowerPoint文档中提取文本内容进行处理。本文将详细介绍如何使用Python开发一个带图形界面的PPT文本提取工具,该工具可以轻松地从PPTX文件中提取所有文本内容,并按页码显示。
全部代码
import wx import os from pptx import Presentation class PPTExtractFrame(wx.Frame): def __init__(self): super().__init__(parent=None, title='PPT文字提取工具', size=(800, 600)) self.InitUI() def InitUI(self): # 创建面板 panel = wx.Panel(self) # 创建垂直布局 vbox = wx.BoxSizer(wx.VERTICAL) # 创建按钮 self.select_btn = wx.Button(panel, label='选择PPT文件') self.select_btn.Bind(wx.EVT_BUTTON, self.OnSelect) vbox.Add(self.select_btn, 0, wx.ALL | wx.CENTER, 5) # 创建文本框 self.memo = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY) vbox.Add(self.memo, 1, wx.ALL | wx.EXPAND, 5) panel.SetSizer(vbox) def OnSelect(self, event): # 创建文件选择对话框 with wx.FileDialog(self, "选择PPTX文件", wildcard="PowerPoint files (*.pptx)|*.pptx", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog: if fileDialog.ShowModal() == wx.ID_CANCEL: return # 获取选择的文件路径 pathname = fileDialog.GetPath() try: self.ExtractText(pathname) except Exception as e: wx.MessageBox(f'错误:{str(e)}', '错误', wx.OK | wx.ICON_ERROR) def ExtractText(self, filepath): # 清空文本框 self.memo.Clear() # 打开PPT文件 prs = Presentation(filepath) # 遍历所有幻灯片 for idx, slide in enumerate(prs.slides, 1): text_content = [] # 提取当前幻灯片中的所有文本 for shape in slide.shapes: if hasattr(shape, "text"): if shape.text.strip(): # 只添加非空文本 text_content.append(shape.text.strip()) # 如果该页有文本,则添加到memo中 if text_content: page_text = f"第{idx}页内容:\n" + "\n".join(text_content) + "\n\n" self.memo.AppendText(page_text) def main(): app = wx.App() frame = PPTExtractFrame() frame.Show() app.MainLoop() if __name__ == '__main__': main()
技术栈介绍
本项目使用了以下技术:
- wxPython - 用于创建图形用户界面
- python-pptx - 用于处理PowerPoint文档
- Python内置的os模块 - 用于文件路径处理
整体架构设计
程序采用面向对象的设计方法,主要包含以下组件:
- 主窗口类(PPTExtractFrame)
- 用户界面初始化方法(InitUI)
- 文件选择处理方法(OnSelect)
- 文本提取核心方法(ExtractText)
详细代码解析
1. 导入必要的模块
import wx import os from pptx import Presentation
这三个import语句导入了程序所需的核心模块:
- wx:wxPython的主模块,提供GUI相关功能
- os:处理文件路径
- pptx.Presentation:用于读取和处理PPTX文件
2. 主窗口类的设计
class PPTExtractFrame(wx.Frame): def __init__(self): super().__init__(parent=None, title='PPT文字提取工具', size=(800, 600)) self.InitUI()
这是程序的主窗口类,继承自wx.Frame。构造函数中:
- 调用父类构造函数,设置窗口标题和大小
- 调用InitUI方法初始化界面元素
3. 用户界面初始化
def InitUI(self): panel = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) self.select_btn = wx.Button(panel, label='选择PPT文件') self.select_btn.Bind(wx.EVT_BUTTON, self.OnSelect) vbox.Add(self.select_btn, 0, wx.ALL | wx.CENTER, 5) self.memo = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY) vbox.Add(self.memo, 1, wx.ALL | wx.EXPAND, 5) panel.SetSizer(vbox)
InitUI方法创建了程序的界面布局:
- 创建一个面板(Panel)作为主容器
- 使用垂直布局管理器(BoxSizer)
- 添加"选择PPT文件"按钮,并绑定点击事件
- 添加多行文本控件用于显示提取的文本
- 设置布局器到面板
4. 文件选择对话框实现
def OnSelect(self, event): with wx.FileDialog(self, "选择PPTX文件", wildcard="PowerPoint files (*.pptx)|*.pptx", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog: if fileDialog.ShowModal() == wx.ID_CANCEL: return pathname = fileDialog.GetPath() try: self.ExtractText(pathname) except Exception as e: wx.MessageBox(f'错误:{str(e)}', '错误', wx.OK | wx.ICON_ERROR)
OnSelect方法处理文件选择操作:
- 创建文件选择对话框,限制文件类型为.pptx
- 使用Python的with语句确保对话框资源正确释放
- 获取选择的文件路径并调用提取方法
- 使用try-except处理可能的错误
5. 核心文本提取功能
def ExtractText(self, filepath): self.memo.Clear() prs = Presentation(filepath) for idx, slide in enumerate(prs.slides, 1): text_content = [] for shape in slide.shapes: if hasattr(shape, "text"): if shape.text.strip(): text_content.append(shape.text.strip()) if text_content: page_text = f"第{idx}页内容:\n" + "\n".join(text_content) + "\n\n" self.memo.AppendText(page_text)
ExtractText方法是程序的核心功能:
- 清空现有文本显示
- 使用python-pptx打开PPT文件
- 遍历每一页幻灯片
- 提取每个形状中的文本内容
- 按页码组织并显示文本
6. 程序入口
def main(): app = wx.App() frame = PPTExtractFrame() frame.Show() app.MainLoop() if __name__ == '__main__': main()
程序入口部分:
- 创建wx应用程序实例
- 创建并显示主窗口
- 启动事件循环
运行结果
到此这篇关于Python制作一个PPT文本提取工具的文章就介绍到这了,更多相关Python PPT文本提取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!