Python辦公神器:教你使用 Python 批量整理通知文件
你是否遇到過這樣的情況:你有一堆Word文件,每個(gè)文件都包含一些重要的信息,你需要把這些信息提取出來,整理到一個(gè)Excel表格中,方便查閱和管理。但是,手動打開每個(gè)文件,復(fù)制粘貼信息,又太費(fèi)時(shí)費(fèi)力,而且容易出錯(cuò)。

有沒有什么辦法可以讓Python幫你自動完成這個(gè)任務(wù)呢?答案是肯定的!本文將教你如何用Python批量提取Word文件中的關(guān)鍵信息,并寫入Excel文件中,只需幾行代碼,就可以節(jié)省大量的時(shí)間和精力。

準(zhǔn)備工作
在開始編寫代碼之前,我們需要先準(zhǔn)備一些必要的工具和文件:
- Python環(huán)境:本文使用的是Python 3.8,你可以在下載安裝。
 - openpyxl庫:這是一個(gè)用于操作Excel文件的Python庫,你可以使用pip install openpyxl命令安裝。
 - python-docx庫:這是一個(gè)用于操作Word文件的Python庫,你可以使用pip install python-docx命令安裝。
 - glob庫:這是一個(gè)用于獲取文件路徑的Python庫,一般已經(jīng)內(nèi)置在Python中,無需安裝。
 - Word文件:這是我們要提取信息的源文件,本文以7個(gè)會議通知文件為例,每個(gè)文件都包含學(xué)習(xí)時(shí)間、學(xué)習(xí)內(nèi)容、學(xué)習(xí)形式、主持人四項(xiàng)關(guān)鍵信息,文件名分別為會議通知1.docx,會議通知2.docx,...,會議通知7.docx,存放在Notice文件夾下。
 - Excel文件:這是我們要寫入信息的目標(biāo)文件,本文以一個(gè)空白的Excel文件為例,文件名為Meeting_temp.xlsx,存放在與Notice文件夾同一級的目錄下。
 
獲取文件路徑
第一步,我們需要獲取Notice文件夾下的所有Word文件的路徑,這樣我們才能對每個(gè)文件進(jìn)行操作。這里我們可以使用glob庫的glob函數(shù),它可以根據(jù)通配符匹配文件路徑,返回一個(gè)列表。例如,我們可以使用glob.glob('*.docx')來匹配當(dāng)前目錄下的所有以.docx結(jié)尾的文件。
為了方便后續(xù)的操作,我們先定義一個(gè)變量path,表示我們的工作目錄,也就是Notice文件夾和Excel文件所在的目錄,你可以根據(jù)實(shí)際情況修改。然后,我們使用glob.glob(path + r'\Notice\*.docx')來獲取Notice文件夾下的所有Word文件的路徑,保存在一個(gè)變量files中。注意,這里我們使用了r字符串,表示原始字符串,不會對反斜杠進(jìn)行轉(zhuǎn)義。
代碼如下:
import glob
path = r'C:\Users\xxx' # 路徑為Notice文件夾和Excel文件所在的目錄,可按實(shí)際情況更改
files = glob.glob(path + r'\Notice\*.docx') # 獲取Notice文件夾下的所有Word文件的路徑
print(files) # 打印文件路徑列表,檢查是否正確輸出如下:
['C:\\Users\\xxx\\Notice\\會議通知1.docx', 'C:\\Users\\xxx\\Notice\\會議通知2.docx', 'C:\\Users\\xxx\\Notice\\會議通知3.docx', 'C:\\Users\\xxx\\Notice\\會議通知4.docx', 'C:\\Users\\xxx\\Notice\\會議通知5.docx', 'C:\\Users\\xxx\\Notice\\會議通知6.docx', 'C:\\Users\\xxx\\Notice\\會議通知7.docx']解析Word文件
第二步,我們需要解析每個(gè)Word文件,獲取需要的四個(gè)信息,即學(xué)習(xí)時(shí)間、學(xué)習(xí)內(nèi)容、學(xué)習(xí)形式、主持人。這里我們可以使用python-docx庫的Document類,它可以讀取Word文件,并將其內(nèi)容以段落(Paragraph)為單位進(jìn)行劃分。我們可以遍歷每個(gè)段落,根據(jù)其文本內(nèi)容,判斷是否包含我們需要的信息,并提取出來。
為了方便后續(xù)的操作,我們先定義一個(gè)變量number,表示序號,用于記錄每個(gè)文件的順序。然后,我們使用一個(gè)for循環(huán),遍歷files列表中的每個(gè)文件路徑,使用Document類打開每個(gè)文件,保存在一個(gè)變量wordfile中。接著,我們定義一個(gè)空列表content_lst,用于存放學(xué)習(xí)內(nèi)容,因?yàn)閷W(xué)習(xí)內(nèi)容可能分散在多個(gè)段落中,我們需要將它們合并成一個(gè)字符串。然后,我們使用一個(gè)嵌套的for循環(huán),遍歷wordfile中的每個(gè)段落,根據(jù)其文本內(nèi)容,判斷是否包含我們需要的信息,并提取出來,保存在相應(yīng)的變量中。具體的判斷邏輯如下:
- 如果段落的文本以“學(xué)習(xí)時(shí)間:”開頭,那么我們就提取其后面的部分,保存在一個(gè)變量study_time中。
 - 如果段落的文本以“主持人:”開頭,那么我們就提取其后面的部分,保存在一個(gè)變量host中。
 - 如果段落的文本以“學(xué)習(xí)形式:”開頭,那么我們就提取其后面的部分,保存在一個(gè)變量study_type中。
 - 如果段落的文本的長度大于等于2,且第一個(gè)字符是數(shù)字,第二個(gè)字符是中文頓號“、”,那么我們就認(rèn)為這是學(xué)習(xí)內(nèi)容的一部分,將其添加到content_lst中。
 
代碼如下:
from docx import Document
number = 0 # 定義一個(gè)變量,表示序號
for file in files: # 遍歷每個(gè)文件路徑
    wordfile = Document(file) # 打開每個(gè)文件
    content_lst = [] # 定義一個(gè)空列表,用于存放學(xué)習(xí)內(nèi)容
    for paragraph in wordfile.paragraphs: # 遍歷每個(gè)段落
        if paragraph.text[0:5] == '學(xué)習(xí)時(shí)間:': # 如果段落的文本以“學(xué)習(xí)時(shí)間:”開頭
            study_time = paragraph.text[5:] # 提取其后面的部分,保存在study_time中
        if paragraph.text[0:4] == '主持人:': # 如果段落的文本以“主持人:”開頭
            host = paragraph.text[4:] # 提取其后面的部分,保存在host中
        if paragraph.text[0:5] == '學(xué)習(xí)形式:': # 如果段落的文本以“學(xué)習(xí)形式:”開頭
            study_type = paragraph.text[5:] # 提取其后面的部分,保存在study_type中
        if len(paragraph.text) >= 2: # 如果段落的文本的長度大于等于2
            if paragraph.text[0].isdigit() and paragraph.text[1] == '、': # 如果第一個(gè)字符是數(shù)字,第二個(gè)字符是中文頓號“、”
                content_lst.append(paragraph.text) # 將其添加到content_lst中
    content = ' '.join(content_lst) # 將content_lst中的元素用空格連接成一個(gè)字符串,保存在content中
    print(study_time, content, study_type, host) # 打印提取的信息,檢查是否正確寫入Excel文件
第三步,我們需要將提取的信息寫入Excel文件中,這樣我們就可以方便地查看和管理。這里我們可以使用openpyxl庫的Workbook類和Worksheet類,它們可以創(chuàng)建和操作Excel文件和工作表。我們可以使用Workbook類的active屬性,獲取當(dāng)前活動的工作表,保存在一個(gè)變量sheet中。然后,我們可以使用Worksheet類的cell方法,根據(jù)行號和列號,指定單元格,并給其賦值。
為了方便后續(xù)的操作,我們先定義一個(gè)變量excel_file,表示我們要寫入的Excel文件的路徑,你可以根據(jù)實(shí)際情況修改。然后,我們使用Workbook類創(chuàng)建一個(gè)Excel文件對象,保存在一個(gè)變量wb中。
接著,我們使用wb的active屬性,獲取當(dāng)前活動的工作表,保存在一個(gè)變量sheet中。然后,我們使用sheet的cell方法,給第一行的每一列賦值,作為表頭,分別是序號、學(xué)習(xí)時(shí)間、學(xué)習(xí)內(nèi)容、學(xué)習(xí)形式、主持人。
接下來,我們使用一個(gè)for循環(huán),遍歷files列表中的每個(gè)文件路徑,使用Document類打開每個(gè)文件,保存在一個(gè)變量wordfile中。然后,我們使用和上一步相同的邏輯,提取每個(gè)文件中的四個(gè)信息,保存在相應(yīng)的變量中。
最后,我們使用sheet的cell方法,給每一行的每一列賦值,分別是序號、學(xué)習(xí)時(shí)間、學(xué)習(xí)內(nèi)容、學(xué)習(xí)形式、主持人。注意,這里我們需要將序號加1,因?yàn)榈谝恍幸呀?jīng)被表頭占用了。最后,我們使用wb的save方法,保存Excel文件。
代碼如下:
from openpyxl import Workbook
excel_file = path + r'\Meeting_temp.xlsx' # 定義Excel文件的路徑,可按實(shí)際情況更改
wb = Workbook() # 創(chuàng)建一個(gè)Excel文件對象
sheet = wb.active # 獲取當(dāng)前活動的工作表
sheet.cell(row=1, column=1).value = '序號' # 給第一行第一列賦值,作為表頭
sheet.cell(row=1, column=2).value = '學(xué)習(xí)時(shí)間' # 給第一行第二列賦值,作為表頭
sheet.cell(row=1, column=3).value = '學(xué)習(xí)內(nèi)容' # 給第一行第三列賦值,作為表頭
sheet.cell(row=1, column=4).value = '學(xué)習(xí)形式' # 給第一行第四列賦值,作為表頭
sheet.cell(row=1, column=5).value = '主持人' # 給第一行第五列賦值,作為表頭
for file in files: # 遍歷每個(gè)文件路徑
    wordfile = Document(file) # 打開每個(gè)文件
    content_lst = [] # 定義一個(gè)空列表,用于存放學(xué)習(xí)內(nèi)容
    for paragraph in wordfile.paragraphs: # 遍歷每個(gè)段落
        if paragraph.text[0:5] == '學(xué)習(xí)時(shí)間:': # 如果段落的文本以“學(xué)習(xí)時(shí)間:”開頭
            study_time = paragraph.text[5:] # 提取其后面的部分,保存在study_time中
        if paragraph.text[0:4] == '主持人:': # 如果段落的文本以“主持人:”開頭
            host = paragraph.text[4:] # 提取其后面的部分,保存在host中
        if paragraph.text[0:5] == '學(xué)習(xí)形式:': # 如果段落的文本以“學(xué)習(xí)形式:”開頭
            study_type = paragraph.text[5:] # 提取其后面的部分,保存在study_type中
        if len(paragraph.text) >= 2: # 如果段落的文本的長度大于等于2
            if paragraph.text[0].isdigit() and paragraph.text[1] == '、': # 如果第一個(gè)字符是數(shù)字,第二個(gè)字符是中文頓號“、”
                content_lst.append(paragraph.text) # 將其添加到content_lst中
    content = ' '.join(content_lst) # 將content_lst中的元素用空格連接成一個(gè)字符串,保存在content中
    number += 1 # 將序號加1
    sheet.cell(row=number+1, column=1).value = number # 給每一行第一列賦值,作為序號
    sheet.cell(row=number+1, column=2).value = study_time # 給每一行第二列賦值,作為學(xué)習(xí)時(shí)間
    sheet.cell(row=number+1, column=3).value = content # 給每一行第三列賦值,作為學(xué)習(xí)內(nèi)容
    sheet.cell(row=number+1, column=4).value = study_type # 給每一行第四列賦值,作為學(xué)習(xí)形式
    sheet.cell(row=number+1, column=5).value = host # 給每一行第五列賦值,作為主持人
wb.save(excel_file) # 保存Excel文件完成任務(wù)
至此,我們已經(jīng)完成了用Python批量提取Word文件中的關(guān)鍵信息,并寫入Excel文件中的任務(wù)。你可以打開Meeting_temp.xlsx文件,查看結(jié)果,如下圖所示:

你可以看到,我們成功地將7個(gè)Word文件中的四個(gè)信息提取出來,并按照序號、學(xué)習(xí)時(shí)間、學(xué)習(xí)內(nèi)容、學(xué)習(xí)形式、主持人的順序,寫入Excel文件中,方便查閱和管理。
總結(jié)
本文教你如何用Python批量提取Word文件中的關(guān)鍵信息,并寫入Excel文件中,只需幾行代碼,就可以節(jié)省大量的時(shí)間和精力。本文涉及到的主要技術(shù)點(diǎn)有:
- openpyxl庫:用于操作Excel文件,可以創(chuàng)建、讀取、寫入、修改Excel文件和工作表。
 - python-docx庫:用于操作Word文件,可以讀取、寫入、修改Word文件和段落。
 - glob庫:用于獲取文件路徑,可以根據(jù)通配符匹配文件路徑,返回一個(gè)列表。
 















 
 
 











 
 
 
 