中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
用Python寫幾行代碼,一分鐘搞定一天工作量,同事直呼:好家伙!

前幾天有一個(gè)讀者說最近要整理幾千份文件,頭都要整禿了,不知道能不能用Python解決,我們來看一下,你也可以思考一下。

由于涉及文件私密所以具體內(nèi)容已做脫敏處理。

大概是這樣,一個(gè)文件夾下有多份會(huì)議通知信息(本文以 7 份文件為例)

每一份通知打開格式基本類似,如下所示??

現(xiàn)在需要將每份會(huì)議文檔中的 學(xué)習(xí)時(shí)間、學(xué)習(xí)內(nèi)容、學(xué)習(xí)形式、主持人 四項(xiàng)關(guān)鍵信息提取出來,整理到 Excel 表格中:

在他真實(shí)需求中,會(huì)議通知四年積累下來有快 1000 份(四年開了這么多次會(huì)也是很厲害...),用人力挨個(gè)打開文件并錄到 Excel 中工作量實(shí)在太大。

好家伙,這種重復(fù)的無聊工作, 不就是一份非常適合交給 Python 的自動(dòng)化工作嗎?我不允許我的粉絲還不會(huì)!

下面我們來看看如何用Python解決這個(gè)問題,主要將涉及:

  • openpyxl 寫入 Excel 文件
  • python-docx 讀取 Word 文件
  • glob 批量獲取文件路徑

為了簡(jiǎn)化上面的需求,本文中需要獲取的會(huì)議通知文件一共 7 個(gè),分別命名為 會(huì)議通知1.docx 會(huì)議通知2.docx... 會(huì)議通知7.docx,存放在 Notice 文件夾下。輸出的目標(biāo) Excel 文件命名為 Meeting_temp.xlsx

基本邏輯

寫代碼之前都先明確完整的問題需要分為幾個(gè)小步驟實(shí)現(xiàn)。從需求中我們大概可以將代碼分為以下幾步:

  • 獲取會(huì)議通知 Notice 文件夾下的所有文件;
  • 解析每一份 Word 文件,獲取需要的四個(gè)信息,輸出到 Excel 中;
  • 保存 Excel 文件

有了邏輯就有了寫代碼的思路了。第 1 步可以由 glob 庫(kù)完成,后面兩步就是操作 Word 的 python-docx 庫(kù)和操作 Excel 的 openpyxl 庫(kù)的交互協(xié)作了。

這兩個(gè)庫(kù)我們都有說過,如果你不熟悉,一定要先閱讀下面的文章!

代碼實(shí)現(xiàn)

首先導(dǎo)入需要的庫(kù):

from docx import Document
from openpyxl import load_workbook
import glob

將模板 Excel 讀取進(jìn)程序:

path  = r'C:\Users\xxx' # 路徑為會(huì)議通知文件夾和 Excel 模板所在的位置,可按實(shí)際情況更改
workbook = load_workbook(path + r'\Meeting_temp.xlsx')
sheet = workbook.active

寫任何批處理的代碼之前都建議先寫一下單次操作的代碼,因此我們先完成對(duì) 會(huì)議通知 1.docx 文件的解析,確保無誤?,F(xiàn)在對(duì)于文檔的結(jié)構(gòu)和關(guān)鍵信息的位置尚不明確,可以先將 Word 以段落 Paragraph 為單位輸出觀察:

wordfile = Document(path + r'\Notice\會(huì)議通知 1.docx')
for paragraph in wordfile.paragraphs:
    print(paragraph)

文件的文字排布脈絡(luò)比較清晰,基本是一句話對(duì)應(yīng)一個(gè)段落,而需要的信息可以簡(jiǎn)單通過判斷每句話(每段話)前幾個(gè)字而明確:

    for paragraph in wordfile.paragraphs:
        if paragraph.text[0:5] == '學(xué)習(xí)時(shí)間:':
            study_time = paragraph.text[5:]
        if paragraph.text[0:4] == '主持人:':
            host = paragraph.text[4:]
        if paragraph.text[0:5] == '學(xué)習(xí)形式:':
            study_type = paragraph.text[5:]

對(duì)于學(xué)習(xí)內(nèi)容的獲取比較特殊,不像其他三個(gè)信息,都在一句話中,且關(guān)鍵字就為前幾個(gè)字:

可以看到,“學(xué)習(xí)內(nèi)容” 四個(gè)字和真正包含的內(nèi)容分散在不同的句子中.這里簡(jiǎn)單用一個(gè)策略:

建立一個(gè)空列表存放,然后遍歷每一段判斷,如果一個(gè)字符為數(shù)字且第二個(gè)字符為中文頓號(hào) “、” 就獲取存放到列表中。最后把列表中的元素重新組合成一個(gè)長(zhǎng)字符串即可:

    content_lst = []
    for paragraph in wordfile.paragraphs:
        if paragraph.text[0:5] == '學(xué)習(xí)時(shí)間:':
            study_time = paragraph.text[5:]
        if paragraph.text[0:4] == '主持人:':
            host = paragraph.text[4:]
        if paragraph.text[0:5] == '學(xué)習(xí)形式:':
            study_type = paragraph.text[5:]
        if len(paragraph.text) >= 2:
            if paragraph.text[0].isdigit() and paragraph.text[1] == '、':
                content_lst.append(paragraph.text)
    content = ' '.join(content_lst)

完成了解析 Word 文件之后,就需要把內(nèi)容輸出的 Excel 文件中了。

簡(jiǎn)單來說,就是將上面代碼獲取到的幾個(gè)元素組合成一個(gè)列表,通過 sheet.append(list) 的方法寫入 Excel 文件中:

number = 0 # 全局中設(shè)置一個(gè)變量用于計(jì)數(shù),做為序號(hào)輸出

wordfile = Document(path + r'\Notice\會(huì)議通知 1.docx')
content_lst = []
for paragraph in wordfile.paragraphs:
    if paragraph.text[0:5] == '學(xué)習(xí)時(shí)間:':
        study_time = paragraph.text[5:]
    if paragraph.text[0:4] == '主持人:':
        host = paragraph.text[4:]
    if paragraph.text[0:5] == '學(xué)習(xí)形式:':
        study_type = paragraph.text[5:]
    if len(paragraph.text) >= 2:
        if paragraph.text[0].isdigit() and paragraph.text[1] == '、':
            content_lst.append(paragraph.text)
content = ' '.join(content_lst)
number += 1
sheet.append([number, study_time, content, study_type, host])

單個(gè)文件解析完,用 glob 改完獲取文件夾下全部文件,建立循環(huán)逐個(gè)解析就能完成本需求,當(dāng)然最后記得保存 Excel 文件。

完整代碼如下??

from docx import Document
from openpyxl import load_workbook
import glob

path  = r'C:\Users\xxx'
workbook = load_workbook(path + r'\Meeting_temp.xlsx')
sheet = workbook.active
number = 0

for file in glob.glob(path + r'\Notice\*.docx'):
    wordfile = Document(file)
    content_lst = []
    for paragraph in wordfile.paragraphs:
        if paragraph.text[0:5] == '學(xué)習(xí)時(shí)間:':
            study_time = paragraph.text[5:]
        if paragraph.text[0:4] == '主持人:':
            host = paragraph.text[4:]
        if paragraph.text[0:5] == '學(xué)習(xí)形式:':
            study_type = paragraph.text[5:]
        if len(paragraph.text) >= 2:
            if paragraph.text[0].isdigit() and paragraph.text[1] == '、':
                content_lst.append(paragraph.text)
    content = ' '.join(content_lst)
    number += 1
    sheet.append([number, study_time, content, study_type, host])

workbook.save(path + r'\Meeting_notice.xlsx')

核心也不過三十行代碼,總共不過三秒就搞定了!

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python Excel Word一秒制作百份合同
python 提取選擇題到excel
手把手教你4種方法用Python批量實(shí)現(xiàn)多Excel多Sheet合并
python處理word和excel文件
實(shí)戰(zhàn)|Python輕松實(shí)現(xiàn)PDF格式轉(zhuǎn)換(附詳細(xì)源碼)
Python辦公自動(dòng)化|從Excel到Word
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服