1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        用Python讀寫Word文檔入門

        共 4334字,需瀏覽 9分鐘

         ·

        2021-11-07 01:46


        最近有同事需要批量出500個Word文檔,按照1個Word文檔耗時1分鐘來算也需要8.33小時足足有1天工時。于是,這位同事找到了才哥幫忙,才哥接過需求花了不到30分鐘寫好腳本,運行腳本不到1分鐘就生成了500份Word文檔并且進行了分類歸檔!


        這就是Python的魅力,讓工作更輕松!

        今天,我們就來了解一下用Python讀寫Word文檔。未來,我將再出兩期進行補充介紹,一篇是批量生成Word文檔的方法(也就是我搞定同事需求的案例),另外一篇是詳解Python寫Word(包含可能你都不知道的各種Word格式),敬請期待哈~

        目錄:

        • 1. 安裝模塊

        • 2. 讀取Word文檔

        • 3. 寫入Word文檔


        1. 安裝模塊

        這里我們用到的是python-docx模塊,讀寫Word文檔的操作均有它完成!

        #?安裝該模塊,在命令行鍵入以下命令
        pip?install?python-docx

        在進行后續(xù)介紹前,我們先簡單了解一下Word文檔。和純文本(比如txt)相比, .docx文件有很多種結(jié)構(gòu),這些結(jié)構(gòu)在python-docx中用3種不同的類型來表示:最高一層是Document對象表示文檔,每個Document對象包含一個Paragraph 對象也就是段落組成的列表,而每個Paragraph對象則包含一個Run對象的列表,至于Run對象大家可以通過下面的段落Paragraph來了解。

        多個Run對象組成的Paragraph

        我們知道Word里的文本包含有很多格式,比如字體、字號、粗體/斜體、顏色等等。一個Run對象是具有相同格式的文本,當發(fā)生變化的時候就需要一個新的Run對象,這也就是上圖中1個Paragraph對象有4個Run對象的原因。

        理解以上知識后,我們再來了解讀與寫吧。


        2. 讀取Word文檔

        我們本地創(chuàng)建一個案例文檔,用于演示讀取Word,案例文檔內(nèi)容如下:

        案例.docx

        可以看到文檔一共有四行,兩行標題以及兩行正文。

        import?docx
        #?讀取Word文檔
        doc?=?docx.Document(r'案例.docx')

        我們知道了讀取Word每個paragraph段落和Run,那么如何讀取完整的Word文本內(nèi)容呢?這里,自定義一個函數(shù)將全部的paragraph段落內(nèi)容存起來,每個paragraph段落之間用換行符\n隔開即可。

        import?docx

        def?getText(fileName):
        ????doc?=?docx.Document(fileName)
        ????TextList?=?[]
        ????for?paragraph?in?doc.paragraphs:
        ????????TextList.append(paragraph.text)
        ????
        ????return?'\n'.join(TextList)

        我們調(diào)用該函數(shù),可以得到:

        fileName?=?r'案例.docx'
        print(getText(fileName))
        標題1
        這是一個段落,有粗體和斜體
        大家好,我是才哥。
        標題2

        當然了,這里讀取后輸出顯示的文本不帶有格式屬性哈。


        3. 寫入Word文檔

        在寫入Word之前,我們先簡單了解下Word的一些格式規(guī)則。

        毫不夸張的講,把全局樣式玩的明白的人蠻少的。這方面主要是正文樣式與標題樣式,如果玩得明白的話,其實設(shè)置好了之后幾乎不需要再進行啥調(diào)整,全局格式都能自動設(shè)置與更新。就我所見的大多數(shù)朋友的文檔,這方面基本達不到。(感覺會被爆錘~~)

        全局樣式

        比如,我們可以設(shè)置正文樣式為 微軟雅黑字體,字號12,縮進,間距等等;設(shè)置標題樣式為 微軟雅黑字體,字號14,刪除段落后間距等等。

        在我們Python處理Word的時候,段落樣式可以應(yīng)用于 Paragraph 對象,字符樣式可以應(yīng)用于 Run 對象,鏈接的樣式可以應(yīng)用于這兩種對象??梢詫?ParagraphRun 對象的 style 屬性設(shè)置為一個字符串,從而設(shè)置樣式。這個字符串應(yīng)該是一種樣式的名稱。如果 style 被設(shè)置為 None,就沒有樣式與 ParagraphRun 對象關(guān)聯(lián)。

        當然,這里我們不展開介紹,就簡單介紹Run對象上的字符屬性。關(guān)于更多的介紹,我們放在第三期的 詳解Python寫Word里。

        對于Run對象的字符text屬性,都有3個狀態(tài):True(啟用)、False(禁用)和None(默認)。

        text屬性有哪些?看下表:

        屬性描述
        bold文本以粗體出現(xiàn)
        italic文本以斜體出現(xiàn)
        underline文本帶下劃線
        strike文本帶刪除線
        double_strike文本帶雙刪除線
        all_caps文本以大寫首字母出現(xiàn)
        small_caps文本以大寫首字母出現(xiàn),小寫字母小兩個點
        shadow文本帶陰影
        outline文本以輪廓線出現(xiàn),而不是實心
        rtl文本從右至左書寫
        imprint文本以刻入頁面的方式出現(xiàn)
        emboss文本以凸出頁面的方式出現(xiàn)

        我們演示一下:

        調(diào)整樣式

        以上就是對段落的一些簡單介紹及演示,接下來,我們來看看怎么創(chuàng)建并寫入Word

        要創(chuàng)建自己的.docx 文件,就調(diào)用 docx.Document(),返回一個新的、空白的 Word Document 對象 ?。Document 對象的 add_paragraph()方法將一段新文本添加到文檔中,并返回添加的 Paragraph 對象的引用。在添加完文本之后,向 Document 對象的 save()方法傳入一個文件名字符串,將 Document 對象保存到文件。

        import?docx

        doc?=?docx.Document()
        doc.add_paragraph('這是一個段落')
        doc.save('寫入word.docx')
        寫入word

        我們可以添加段落、設(shè)置段落文本樣式等等,比如:

        import?docx

        doc?=?docx.Document()
        p1?=?doc.add_paragraph('這是一個段落')
        p1.add_run('加粗的一句話').bold?=?True
        doc.add_paragraph('這是第二個段落')
        doc.save('多段落.docx')
        多段落

        我們還可以添加一個段位,這個段落為標題樣式,這里需要用到add_heading()。它有兩個參數(shù),字符串表示文本內(nèi)容,后面數(shù)字是標題層級。

        import?docx

        doc?=?docx.Document()
        doc.add_heading('標題',0)
        doc.add_heading('標題1',1)
        doc.add_heading('標題2',2)
        doc.add_heading('標題3',3)
        doc.add_heading('標題4',4)
        doc.save('標題.docx')
        標題

        同樣,我們還可換行與換頁操作。

        要添加換行符(而不是開始一個新的段落),可以在 Run 對象上調(diào)用 add_break()方法,換行符將出現(xiàn)在它后面。如果希望添加換頁符,可以將 docx.text.WD_BREAK.PAGE作為唯一的參數(shù),傳遞給 add_break() ?。

        import?docx

        doc?=?docx.Document()
        p1?=?doc.add_paragraph('這是一個段落')
        p1.add_run('加粗的一句話').bold?=?True
        #?換行
        doc.paragraphs[0].runs[0].add_break()
        doc.save('換行.docx')
        換行

        有人會說,一般word里還有圖片嘛,當然咱們也能搞定添加圖片。

        有一個 add_picture()方法,可以在段落末尾添加圖像 。

        import?docx

        doc?=?docx.Document()
        doc.add_paragraph('這是一個段落,后面帶圖片')
        doc.add_picture('圖片.png',?
        ????????????????width=docx.shared.Inches(3),
        ????????????????height=docx.shared.Cm(4))
        doc.add_paragraph('這是第二個段落')
        doc.save('圖片.docx')
        添加圖片

        以上就是本次的簡單入門介紹。

        其實Word文檔各種樣式設(shè)置,數(shù)據(jù)類型展示等等非常豐富,而Python-docx這個模塊其實也能進行大多數(shù)的處理。不過,日常中我們用到的功能也沒那么多,此部分留作后續(xù)詳情講解哈。



        推薦閱讀:

        入門:?最全的零基礎(chǔ)學Python的問題? |?零基礎(chǔ)學了8個月的Python??|?實戰(zhàn)項目?|學Python就是這條捷徑


        量化:?定投基金到底能賺多少錢?? |?我用Python對去年800只基金的數(shù)據(jù)分析??


        干貨:爬取豆瓣短評,電影《后來的我們》?|?38年NBA最佳球員分析?|? ?從萬眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個海量小姐姐素描圖?|碟中諜這么火,我用機器學習做個迷你推薦系統(tǒng)電影


        趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!


        AI:?會做詩的機器人?|?給圖片上色?|?預測收入?|?碟中諜這么火,我用機器學習做個迷你推薦系統(tǒng)電影


        小工具:?Pdf轉(zhuǎn)Word,輕松搞定表格和水??!?|?一鍵把html網(wǎng)頁保存為pdf!|??再見PDF提取收費!?|?用90行代碼打造最強PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換?|?制作一款釘釘?shù)蛢r機票提示器!?|60行代碼做了一個語音壁紙切換器天天看小姐姐!


        年度爆款文案

        點閱讀原文,看Python全套!

        瀏覽 107
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            肉色丝袜好紧我要进去了 | 高清无码视频在线免费观看 | 日韩一级性爱视频 | 色色色天堂 | 国产女优在线视频 | 影音先锋国产资源 | 97超碰免费观看 | 国产一区在线播放 | 国产十无码 | 国产吧在线视频 |