Python制作一个PPT文本提取工具

 更新时间:2025年01月19日 08:53:27   作者: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文本提取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python绘制多个曲线的折线图

    python绘制多个曲线的折线图

    这篇文章主要为大家详细介绍了python绘制多个曲线的折线图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Python 2.x如何设置命令执行的超时时间实例

    Python 2.x如何设置命令执行的超时时间实例

    这篇文章主要给大家介绍了关于Python 2.x如何设置命令执行超时时间的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • 使用python的turtle函数绘制一个滑稽表情

    使用python的turtle函数绘制一个滑稽表情

    Turtle库是Python语言中一个很流行的绘制图像的函数库,今天通过实例代码给大家分享使用python的turtle函数绘制一个滑稽表情,一起看看吧
    2020-02-02
  • 浅析python继承与多重继承

    浅析python继承与多重继承

    在本篇文章中我们给大家分析了python继承与多重继承的相关知识点内容,有兴趣的读者们参考下。
    2018-09-09
  • 在Python中处理列表之reverse()方法的使用教程

    在Python中处理列表之reverse()方法的使用教程

    这篇文章主要介绍了在Python中处理列表之reverse()方法的使用教程,是Python入门中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Django中的ajax请求

    Django中的ajax请求

    今天小编就为大家分享一篇关于Django中的ajax请求,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • pytorch的backward()的底层实现逻辑详解

    pytorch的backward()的底层实现逻辑详解

    自动微分是一种计算张量(tensors)的梯度(gradients)的技术,它在深度学习中非常有用,这篇文章主要介绍了pytorch的backward()的底层实现逻辑,需要的朋友可以参考下
    2023-11-11
  • python执行js脚本报错CryptoJS is not defined问题

    python执行js脚本报错CryptoJS is not defined问题

    这篇文章主要介绍了python执行js脚本报错CryptoJS is not defined问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Python模拟钢琴键盘实现演奏数鸭子歌曲

    Python模拟钢琴键盘实现演奏数鸭子歌曲

    前几天上课老师给我们讲了两个模块,然后利用这两个模块来模拟钢琴键盘去简单地演奏《数鸭子》今天来分享给大家,感兴趣的可以了解一下
    2022-11-11
  • Python个人博客程序开发实例信息显示

    Python个人博客程序开发实例信息显示

    这篇文章主要介绍了怎样用Python来实现一个完整的个人博客系统,我们通过实操上手的方式可以高效的巩固所学的基础知识,感兴趣的朋友一起来看看吧
    2022-12-12

最新评论