用Python讀寫Word文檔入門

2021-12-12 俊紅的數據分析之路

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

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

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

目錄:

1. 安裝模塊

2. 讀取Word文檔

3. 寫入Word文檔

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

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

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

多個Run對象組成的Paragraph

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

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

我們本地創建一個案例文檔,用於演示讀取Word,案例文檔內容如下:

案例.docx

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

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

我們知道了讀取Word每個paragraph段落和Run,那麼如何讀取完整的Word文本內容呢?這裡,自定義一個函數將全部的paragraph段落內容存起來,每個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)

我們調用該函數,可以得到:

fileName = r'案例.docx'
print(getText(fileName))

標題1
這是一個段落,有粗體和斜體
大家好,我是才哥。
標題2

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

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

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

全局樣式

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

在我們Python處理Word的時候,段落樣式可以應用於 Paragraph 對象,字符樣式可以應用於 Run 對象,連結的樣式可以應用於這兩種對象。可以將 Paragraph 和Run 對象的 style 屬性設置為一個字符串,從而設置樣式。這個字符串應該是一種樣式的名稱。如果 style 被設置為 None,就沒有樣式與 Paragraph 或 Run 對象關聯。

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

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

text屬性有哪些?看下表:

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

我們演示一下:

調整樣式

以上就是對段落的一些簡單介紹及演示,接下來,我們來看看怎麼創建並寫入Word

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

import docx

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

寫入word

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

import docx

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

多段落

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

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 對象上調用 add_break()方法,換行符將出現在它後面。如果希望添加換頁符,可以將 docx.text.WD_BREAK.PAGE作為唯一的參數,傳遞給 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文檔各種樣式設置,數據類型展示等等非常豐富,而Python-docx這個模塊其實也能進行大多數的處理。不過,日常中我們用到的功能也沒那麼多,此部分留作後續詳情講解哈。

如果你喜歡本系列,還請點讚+在看支持啦~~

相關焦點

  • 文科生快速入門python(十三) | 文件讀寫詳解
    除了之外【python辦公自動化(一) | chardet庫自動讀寫多編碼格式的文件】中描述的編碼錯誤外,還有忘記close()造成讀不到文件、搞混r,w,a,x模式、寫錯read, readline, readlines方法之類的常見錯誤。
  • 使用 Python 操作 word文檔
    最近手頭有一個需求是對word文檔內容進行判斷,搜索到一個包感覺不錯,簡單記錄一下關鍵操作:python-docx能做什麼
  • 如何用 Python 實現 Word 文檔操作?
    使用win32com需要安裝pypiwin32推薦使用python的IDLE,交互方便1、如何新建文檔from win32com.client import Dispatchapp = Dispatch('Word.Application')
  • 慢步python,教你怎麼通過python編程來修改word文檔內標題
    大家好,這裡是地鐵慢步,快慢的慢,因為筆者業餘學的python編程,學得的確也算是慢,慢不打緊,一直在進步就好。今天想教大家怎麼實現通過python編程來修改word文檔。熟悉word的人,可能會覺得多此一舉,直接用OFFICE或者WPS就可以了啊,幹嘛要用python?
  • python辦公自動化(二) | 讀取.txt、.data、.doc和.docx文檔的部分內容
    txt文件,非常好用。但是,需要注意設定sep=','根據數據需要調整分隔符。讀取doc文檔在日常工作中,我們經常會遇到,給定一個.doc文檔,要求從中提取一部分文字存起來。但是,.doc格式比較老,python中沒有庫讀寫.doc,所以就需要一個系統工具的庫(這裡是win32com)來打開word應用,將.doc轉存為另存為.docx,再使用python-docx進行讀寫,以完成自動化操作。首先,導入必要的庫。
  • 萬字教程:Python Word 文檔自動化
    python -m pip install -U pip setuptoolspython-docx(我們大部分操作都是使用此庫)from docx import Documentfrom docx.shared import Incheshttps://python-docx.readthedocs.io/en
  • 用 Python 操作 Word 文檔,看這一篇就對了!
    >document.save('new.docx')示例代碼 0.1 Python-docx新建文檔.py:from docx import Documentdef GenerateNewWord(filename):    document = Document()    document.save(filename)if
  • 開源Word讀寫組件DocX介紹與入門
  • Python自動化用這些知識點就夠了!
    excel自動化office家族其實都可以用VBA解決自動化的問題,但可能很多人不會用。python針對excel有很多的第三方庫可以用,比如xlwings、xlsxwriter、xlrd、xlwt、pandas、xlsxwriter、win32com、xlutils等等。
  • python教程實戰,json、csv等讀寫
    python教程實戰,json、csv等讀寫JSON的全稱是」JavaScript Object Notation」,意思是JavaScript
  • Word文檔技巧:新手怎樣學做word文檔?新手入門word文檔製作!
    Word文檔技巧:新手怎樣學做word文檔?新手入門word文檔製作!
  • 【秘書實務】 Word文檔技巧:新手怎樣學做word文檔?新手入門word文檔製作!
    1.問:請問word中怎樣讓每一章用不同的頁眉?怎麼我現在只能用一個頁眉,一改就全部改了?
  • Python實戰009:讀取Word文檔中的表格數據及表格合併問題解決
    我現在要解析的word文檔中主要是表格、字符串、圖片等信息,我們主要是要拿到表格中的數據。     處理這類文檔數據當然優先考慮Python啦,python解析word文件可以使用包docx。首先我們需要安裝python-docx,直接執行命令:pip install python-docx即可安裝。當前的python-docx的版本為0.8.10,當python-docx安裝完畢後通過python命令啟動Python並輸入import docx命令,如果沒有提示任何錯誤即表示python-docx安裝成功了。
  • 第105天: Python 操作 Word
    寫入 Word平時我們在操作 Word 寫文檔的時候,一般分為幾部分:標題、章節、段落、圖片、表格、引用以及項目符號編號等。下面我們就按這幾部分如何用 Python 操作來一一介紹。('如何使用 Python 創建 Word',0)# 保存文件doc1.save('word1.docx')這樣就完成了創建文檔和文章標題的操作,下面通過命令 python word_1.py 運行程序,會生成名為 word1.docx 的文檔,打開文章顯示如下圖所示:
  • 【Python基礎】python使用python-docx操作word
    1、python-docx庫介紹該模塊兒可以創建、修改Word(.docx)文件;python-docx使用官網:python-docx官網我們在安裝此模塊兒使用的是pip install python-docx,但是在導入的時候是import docx;2、Python讀取Word文檔內容注意:每進行一個操作,必須保存一下,否則等於白做;1)word文檔結構介紹在這裡插入圖片描述2)python-docx
  • Python Word處理文檔:python-docx
    關注+星標,每天學習Python新技能python-docx 是用於創建可修改微軟 Word(.docx) 的一個 Python 庫。
  • Python用不好?看官方中文文檔啦
    目前也有很多高質量的 Python 中文資源,但大部分都是大牛寫的書或教程,官方文檔的翻譯並得不到保證。如下在 Python 文檔中,只有英語、法語、日語和韓語可選,我們並看不到中文選項。官方中文文檔地址:https://docs.python.org/zh-cn但是如果我們在地址欄中手動鍵入 zh-cn,即:https://docs.python.org/zh-cn,那麼我們就能看到官方的中文文檔了。如下,我們現在從下拉項也可以直接看到中文選項。
  • 別加班了,「膠水語言」辦公自動化Word篇——一招搞定300頁文檔
    這兩天在更新Python在辦公自動化方面的文章,前面發的是關於辦公軟體中的Excel部分,有網友私信我說想看看Python在Word方面的應用,今天就給大家從基礎的入門操作開始吧!我們在工作中會遇到需要讀取一個有幾百頁的word文檔並從中整理出一些信息的需求,比如產品的API文檔一般是word格式的。
  • 教你如何用python輕輕鬆鬆操作Excel、Word、CSV,一文就夠了,趕緊碼住!!!
    寫入 Word平時我們在操作 Word 寫文檔的時候,一般分為幾部分:標題、章節、段落、圖片、表格、引用以及項目符號編號等。下面我們就按這幾部分如何用 Python 操作來一一介紹。# 新增文檔標題doc1.add_heading('如何使用 Python 創建和操作 Word',0)# 保存文件doc1.save('word1.docx')這樣就完成了創建文檔和文章標題的操作,下面運行程序,會生成名為 word1.docx 的文檔,打開文章顯示如下圖所示:
  • Word 神器 python-docx
    首先想到 word 自身的替換功能,倒是能查到,但是沒法動態替換,即只替換兩邊引號,而不換中間內容;另外一種方案是,即用 VBA,通過編程來替換,雖說做過幾個項目,可好久不用,拾起費勁,再加上 VBA 中各種概念和用法,學習成本太高,放棄;