• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Python操作PPT實現自動查找替換

    標簽: Python  python

    前言

    本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。

    作者:多巴胺愛學習

    PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun

    為什么要這么干

    萬事皆有緣由,以下純屬YY,不想看的可以直接忽略。

    OCR文字識別已經很流行了,我們做PPT的時候經常會用文字識別軟件來獲得內容(好吧,我經常這么干。。。)。OCR軟件在識別文字上的準確性已經比較高了,但是標點符合卻差強人意,逗號、分號、冒號之類的經常會被識別為半角,這個時候就需要改了。

    當然,我們可以用ppt當中的替換功能手工替換。

    再當然,我們還可以用ppt的宏功能實現,使用起來更方便。只是這個宏,目前我還沒寫出來,寫出來后再另外分享了。

    本次操作環境

    操作系統:win10

    Python版本:3.7

    使用的第三方庫:python-pptx

    如果沒有安裝第三方庫的話,需要先安裝下:

    • Windows:pip install python-pptx
    • Mac:pip3 install python-pptx

    PPT科普

    PPT是由許多頁組成的,頁叫做Slide;

    每一頁又包含了許多組件,像文本框、表格,這些組件叫做Shape。我們做PPT的時候,文字主要就是放在文本框或者表格中的;

    文本框中的文字是以段落的形式存在的,段落叫做Paragraph;

    表格是由單元格組成的,單元格叫做Cell,單元格中的文字,也是由段落組成的。
    如下圖:
    在這里插入圖片描述

    代碼實現

    代碼實現的原理很簡單,遍歷Slide找Shape;遍歷Shape找Paragraph;遍歷Paragraph找run(run簡單點理解就是文字塊);在run中看看有沒有需要替換的字符,有的話就替換了。

    import pptx
    fromShao pptx import Presentation
    
    TEXT_NEED_REPLACE = [('概念', 'Concept'), ('企業', 'Enterprise')]#需要替換的內容,數據結構為“[(被替換內容1,替換內容1),(被替換內容2,替換內容2),……]”
    
    FILE_OPEN = r"c:/python/asoursefiles/00301.pptx"#需要打開的文件地址
    FILE_SAVE = r"c:/python/asoursefiles/demo.pptx"#需要保存的文件地址,不建議直接覆蓋原文件,當然你非要覆蓋原文件也攔不住。這里需要提示的是:需要保存的文件不能是打開的狀態,否則會無法保存。
    
    
    def replace_text(text_frame):#該函數實現的是文本替換功能
        for paragraph in text_frame.paragraphs:
            for run in paragraph.runs:
                for tt in TEXT_NEED_REPLACE:
                    if tt[0] in run.text:
                        run.text = run.text.replace(tt[0], tt[1])
    
    def process_ppt(filename_open, filename_save):
        prs = Presentation(filename_open)
        for slide in prs.slides:
            for shape in slide.shapes:
                if shape.has_text_frame:#判斷Shape是否含有文本框
                    text_frame = shape.text_frame
                    replace_text(text_frame)#調用replace_text函數實現文本替換
                if shape.has_table:#判斷Shape是否含有表格
                    table = shape.table
                    for cell in table.iter_cells():#遍歷表格的cell
                        text_frame = cell.text_frame
                        replace_text(text_frame))#調用replace_text函數實現文本替換
        prs.save(filename_save)#保存
    
    process_ppt(FILE_OPEN, FILE_SAVE)
    

    后記

    用Python與ppt、word進行交互是一個比較雞肋的想法,99%的情況下,都是閑的無聊,微軟的office功能已經不要太強大了。

    用Python操作excel,相比于office,在個別情況(數據量大,或者需要實現的分析步驟太多,太復雜之類的)下可能具有優勢,但通常情況下也用不到。

    對于普通辦公需求,從實用角度來說,學好office比學什么python,R,matlab,SPSS之類的有用多了。畢竟office的強大,只有你想不到的,沒有它做不到的(安裝包也夠大的,打開之后電腦風扇轉的哇哇哇的響)。

    當然,會點Python,matlab之類的,你找工作的時候可以寫在簡歷上。工作中真碰到坑了,也可以咬咬牙自己去填。

    版權聲明:本文為fei347795790原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/fei347795790/article/details/106996817

    智能推薦

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    猜你喜歡

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    基于TCP/IP的網絡聊天室用Java來實現

    基于TCP/IP的網絡聊天室實現 開發工具:eclipse 開發環境:jdk1.8 發送端 接收端 工具類 運行截圖...

    19.vue中封裝echarts組件

    19.vue中封裝echarts組件 1.效果圖 2.echarts組件 3.使用組件 按照組件格式整理好數據格式 傳入組件 home.vue 4.接口返回數據格式...

    精品国产乱码久久久久久蜜桃不卡