欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python制作一個(gè)PPT文本提取工具

 更新時(shí)間:2025年01月19日 08:53:27   作者:winfredzhang  
這篇文章主要為大家詳細(xì)介紹了如何使用Python開發(fā)一個(gè)帶圖形界面的PPT文本提取工具,可以從PPTX文件中提取所有文本內(nèi)容,有需要的小伙伴可以了解下

在日常工作中,我們經(jīng)常需要從PowerPoint文檔中提取文本內(nèi)容進(jìn)行處理。本文將詳細(xì)介紹如何使用Python開發(fā)一個(gè)帶圖形界面的PPT文本提取工具,該工具可以輕松地從PPTX文件中提取所有文本內(nèi)容,并按頁碼顯示。

全部代碼

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):
        # 創(chuàng)建面板
        panel = wx.Panel(self)
        
        # 創(chuàng)建垂直布局
        vbox = wx.BoxSizer(wx.VERTICAL)
        
        # 創(chuàng)建按鈕
        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)
        
        # 創(chuàng)建文本框
        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):
        # 創(chuàng)建文件選擇對(duì)話框
        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'錯(cuò)誤:{str(e)}', '錯(cuò)誤',
                            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 = []
            
            # 提取當(dāng)前幻燈片中的所有文本
            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èi)容:\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()

技術(shù)棧介紹

本項(xiàng)目使用了以下技術(shù):

  • wxPython - 用于創(chuàng)建圖形用戶界面
  • python-pptx - 用于處理PowerPoint文檔
  • Python內(nèi)置的os模塊 - 用于文件路徑處理

整體架構(gòu)設(shè)計(jì)

程序采用面向?qū)ο蟮脑O(shè)計(jì)方法,主要包含以下組件:

  • 主窗口類(PPTExtractFrame)
  • 用戶界面初始化方法(InitUI)
  • 文件選擇處理方法(OnSelect)
  • 文本提取核心方法(ExtractText)

詳細(xì)代碼解析

1. 導(dǎo)入必要的模塊

import wx
import os
from pptx import Presentation

這三個(gè)import語句導(dǎo)入了程序所需的核心模塊:

  • wx:wxPython的主模塊,提供GUI相關(guān)功能
  • os:處理文件路徑
  • pptx.Presentation:用于讀取和處理PPTX文件

2. 主窗口類的設(shè)計(jì)

class PPTExtractFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='PPT文字提取工具', size=(800, 600))
        self.InitUI()

這是程序的主窗口類,繼承自wx.Frame。構(gòu)造函數(shù)中:

  • 調(diào)用父類構(gòu)造函數(shù),設(shè)置窗口標(biāo)題和大小
  • 調(diào)用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方法創(chuàng)建了程序的界面布局:

  • 創(chuàng)建一個(gè)面板(Panel)作為主容器
  • 使用垂直布局管理器(BoxSizer)
  • 添加"選擇PPT文件"按鈕,并綁定點(diǎn)擊事件
  • 添加多行文本控件用于顯示提取的文本
  • 設(shè)置布局器到面板

4. 文件選擇對(duì)話框?qū)崿F(xiàn)

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'錯(cuò)誤:{str(e)}', '錯(cuò)誤',
                        wx.OK | wx.ICON_ERROR)

OnSelect方法處理文件選擇操作:

  • 創(chuàng)建文件選擇對(duì)話框,限制文件類型為.pptx
  • 使用Python的with語句確保對(duì)話框資源正確釋放
  • 獲取選擇的文件路徑并調(diào)用提取方法
  • 使用try-except處理可能的錯(cuò)誤

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èi)容:\n" + "\n".join(text_content) + "\n\n"
            self.memo.AppendText(page_text)

ExtractText方法是程序的核心功能:

  • 清空現(xiàn)有文本顯示
  • 使用python-pptx打開PPT文件
  • 遍歷每一頁幻燈片
  • 提取每個(gè)形狀中的文本內(nèi)容
  • 按頁碼組織并顯示文本

6. 程序入口

def main():
    app = wx.App()
    frame = PPTExtractFrame()
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()

程序入口部分:

  • 創(chuàng)建wx應(yīng)用程序?qū)嵗?/li>
  • 創(chuàng)建并顯示主窗口
  • 啟動(dòng)事件循環(huán)

 運(yùn)行結(jié)果

到此這篇關(guān)于Python制作一個(gè)PPT文本提取工具的文章就介紹到這了,更多相關(guān)Python PPT文本提取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python繪制多個(gè)曲線的折線圖

    python繪制多個(gè)曲線的折線圖

    這篇文章主要為大家詳細(xì)介紹了python繪制多個(gè)曲線的折線圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python 2.x如何設(shè)置命令執(zhí)行的超時(shí)時(shí)間實(shí)例

    Python 2.x如何設(shè)置命令執(zhí)行的超時(shí)時(shí)間實(shí)例

    這篇文章主要給大家介紹了關(guān)于Python 2.x如何設(shè)置命令執(zhí)行超時(shí)時(shí)間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • 使用python的turtle函數(shù)繪制一個(gè)滑稽表情

    使用python的turtle函數(shù)繪制一個(gè)滑稽表情

    Turtle庫是Python語言中一個(gè)很流行的繪制圖像的函數(shù)庫,今天通過實(shí)例代碼給大家分享使用python的turtle函數(shù)繪制一個(gè)滑稽表情,一起看看吧
    2020-02-02
  • 淺析python繼承與多重繼承

    淺析python繼承與多重繼承

    在本篇文章中我們給大家分析了python繼承與多重繼承的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的讀者們參考下。
    2018-09-09
  • 在Python中處理列表之reverse()方法的使用教程

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

    這篇文章主要介紹了在Python中處理列表之reverse()方法的使用教程,是Python入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Django中的ajax請(qǐng)求

    Django中的ajax請(qǐng)求

    今天小編就為大家分享一篇關(guān)于Django中的ajax請(qǐng)求,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • pytorch的backward()的底層實(shí)現(xiàn)邏輯詳解

    pytorch的backward()的底層實(shí)現(xiàn)邏輯詳解

    自動(dòng)微分是一種計(jì)算張量(tensors)的梯度(gradients)的技術(shù),它在深度學(xué)習(xí)中非常有用,這篇文章主要介紹了pytorch的backward()的底層實(shí)現(xiàn)邏輯,需要的朋友可以參考下
    2023-11-11
  • python執(zhí)行js腳本報(bào)錯(cuò)CryptoJS is not defined問題

    python執(zhí)行js腳本報(bào)錯(cuò)CryptoJS is not defined問題

    這篇文章主要介紹了python執(zhí)行js腳本報(bào)錯(cuò)CryptoJS is not defined問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Python模擬鋼琴鍵盤實(shí)現(xiàn)演奏數(shù)鴨子歌曲

    Python模擬鋼琴鍵盤實(shí)現(xiàn)演奏數(shù)鴨子歌曲

    前幾天上課老師給我們講了兩個(gè)模塊,然后利用這兩個(gè)模塊來模擬鋼琴鍵盤去簡(jiǎn)單地演奏《數(shù)鴨子》今天來分享給大家,感興趣的可以了解一下
    2022-11-11
  • Python個(gè)人博客程序開發(fā)實(shí)例信息顯示

    Python個(gè)人博客程序開發(fā)實(shí)例信息顯示

    這篇文章主要介紹了怎樣用Python來實(shí)現(xiàn)一個(gè)完整的個(gè)人博客系統(tǒng),我們通過實(shí)操上手的方式可以高效的鞏固所學(xué)的基礎(chǔ)知識(shí),感興趣的朋友一起來看看吧
    2022-12-12

最新評(píng)論