Python制作一個(gè)PPT文本提取工具
在日常工作中,我們經(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 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è)滑稽表情
Turtle庫是Python語言中一個(gè)很流行的繪制圖像的函數(shù)庫,今天通過實(shí)例代碼給大家分享使用python的turtle函數(shù)繪制一個(gè)滑稽表情,一起看看吧2020-02-02pytorch的backward()的底層實(shí)現(xiàn)邏輯詳解
自動(dòng)微分是一種計(jì)算張量(tensors)的梯度(gradients)的技術(shù),它在深度學(xué)習(xí)中非常有用,這篇文章主要介紹了pytorch的backward()的底層實(shí)現(xiàn)邏輯,需要的朋友可以參考下2023-11-11python執(zhí)行js腳本報(bào)錯(cuò)CryptoJS is not defined問題
這篇文章主要介紹了python執(zhí)行js腳本報(bào)錯(cuò)CryptoJS is not defined問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Python模擬鋼琴鍵盤實(shí)現(xiàn)演奏數(shù)鴨子歌曲
前幾天上課老師給我們講了兩個(gè)模塊,然后利用這兩個(gè)模塊來模擬鋼琴鍵盤去簡(jiǎn)單地演奏《數(shù)鴨子》今天來分享給大家,感興趣的可以了解一下2022-11-11Python個(gè)人博客程序開發(fā)實(shí)例信息顯示
這篇文章主要介紹了怎樣用Python來實(shí)現(xiàn)一個(gè)完整的個(gè)人博客系統(tǒng),我們通過實(shí)操上手的方式可以高效的鞏固所學(xué)的基礎(chǔ)知識(shí),感興趣的朋友一起來看看吧2022-12-12