
來源:早起Python
作者:陳熹
40個(gè)Python辦公自動(dòng)化案例合輯
大家好,我是早起。本文將分享一個(gè)常見辦公場景下的Python自動(dòng)化案例,主要將涉及以下兩個(gè)內(nèi)容
有一個(gè)文件夾 貨物清單 中含有多張貨物清單的影印版 PDF,分別命名為 文件 (1).pdf 文件 (2).pdf ... 文件 (20).pdf,如下所示:
PDF 是純圖片類型,里面的文字信息無法手動(dòng)復(fù)制,同時(shí)本例中所有的圖片都向左旋轉(zhuǎn) 90 度,大致如下圖所示(馬賽克部分為無關(guān)內(nèi)容):
我們需要做的是 「 獲取圖中紅框部分 TRACKING# 以及 REF2 冒號(hào)后的字符串,用 & 連接后重命名這個(gè) PDF 文件 」 !
也就是需要根據(jù)每個(gè)PDF內(nèi)容來批量重命名一大堆文件,最終效果如下
本需求是一個(gè)批處理問題,即需要對(duì)諸多文件執(zhí)行類型的操作,基本思路是先完成對(duì)一份文件的處理,然后借助 glob 模塊獲取指定路徑所有符合要求的文件路徑,執(zhí)行批處理框架,固后面的操作先針對(duì) 文件 (1).pdf
需求中最大的難題在于,PDF 是圖片類型,無法按常規(guī)方法提取文件。解決思路是利用光學(xué)字符識(shí)別(OCR)將圖片中的文字識(shí)別出,然后進(jìn)行后續(xù)操作,這里就涉及到一些先后順序:
將圖片向右旋轉(zhuǎn)回正位
截取需要識(shí)別的部分圖片
將截取的圖片交給 OCR 獲取字符串
為了完成 OCR,需要在電腦上安裝三個(gè)軟件:
Ghostscript 32 位
ImageMagick 32 位
tesseract-OCR 32 位
三個(gè)軟件的下載安裝沒有特殊的地方(tesseract 配置稍復(fù)雜但網(wǎng)絡(luò)有上諸多教程,這里不再贅述),讀者可自行搜索下載及配置
首先導(dǎo)入需要的模塊:
from wand.image import Image
from PIL import Image as PI import pyocr import pyocr.builders import io import glob import re import os import shutil
具體的模塊用途可以參考下面具體代碼。其中 wand 和 pyocr 由于是非標(biāo)準(zhǔn)庫需要自行額外安裝。打開命令行輸入:
pip install wand
pip install pyocr
作為測試以及方便后面的實(shí)際運(yùn)行,需求中的 貨物清單 這一文件夾可以放在桌面上。為了獲取其中的內(nèi)容首先我們要明確桌面的路徑。每個(gè)人每臺(tái)電腦的桌面路徑都不相同,如果直接復(fù)制當(dāng)前電腦桌面的路徑,更換電腦或者其他用戶調(diào)試就需要額外修改??赏ㄟ^下面基于 os 模塊的代碼獲取桌面路徑:
# 獲取桌面路徑包裝成一個(gè)函數(shù) def GetDesktopPath(): return os.path.join(os.path.expanduser("~"), 'Desktop')
path = GetDesktopPath() + r'貨物清單' # 獲取 貨物清單 文件夾路徑
獲取配置好的 tesseract 便于后面調(diào)用:
tool = pyocr.get_available_tools()[0]
以 文件 (1).pdf 為例,通過 wand 模塊將 PDF 文件轉(zhuǎn)化為分辨率為 300 的 jpeg 圖片形式:
image_pdf = Image(filename=path + r'文件 (1).pdf', resolution=300)
image_jpeg = image_pdf.convert('jpeg')
將圖片解析為二進(jìn)制矩陣:
image_lst = [] for img in image_jpeg.sequence:
img_page = Image(image=img)
image_lst.append(img_page.make_blob('jpeg'))
用 io 模塊的 BytesIO 方法讀取二進(jìn)制內(nèi)容為圖片形式:
new_img = PI.open(io.BytesIO(image_lst[0]))
由于圖片現(xiàn)在處于左旋 90 度的水平位,將其轉(zhuǎn)為正位可以用 rotate() 方法,注意該方法是逆時(shí)針旋轉(zhuǎn),因此回正位需要逆時(shí)針旋轉(zhuǎn) 270 度。完善上面的代碼,并為 new_img.show() 預(yù)覽圖片:
new_img = PI.open(io.BytesIO(image_lst[0])).rotate(270)
new_img.show()
彈出圖片并恢復(fù)到了正位,接下來分別截取需要提取部位字符串的圖片了,盡量讓圖片中只有需要識(shí)別的部分,獲取識(shí)別出來容易簡單處理獲得需要的內(nèi)容 截取圖片用 image.crop((left, top, right, bottom)) 四個(gè)參數(shù)需要反復(fù)調(diào)試才能確定。首先提取 TRACKING# 部位需要的內(nèi)容,經(jīng)確定四個(gè)參數(shù)分別是 350 600 1350 730,嘗試截取和預(yù)覽圖片:
### 解析1Z開頭碼 left = 350
top = 600
right = 1300
bottom = 730
image_obj1 = new_img.crop((left, top, right, bottom))
image_obj1.show()
截取成功后可以交給 OCR 了,代碼為 tool.image_to_string()
txt1= tool.image_to_string(image_obj1) print(txt1)
通過正則提取紅框內(nèi)需要的內(nèi)容:
req = 'TRACKING #: (.*)' txt1_real = ''.join(re.findall(req, txt1)[0].split()) print(txt1_real)
用同樣的辦法也可以提取另一個(gè)紅框的文字:
### 解析C開頭碼 left = 205 top = 1170 right = 2450 bottom = 1200 image_obj2 = new_img.crop((left, top, right, bottom)) txt2 = tool.image_to_string(image_obj2) req = 'C.d+d' txt2_real = re.findall(req, txt2)[0]
最后將兩個(gè)字符串和 & 拼接為長字符串,然后通過 os.rename() 完成重命名文件的目的:
file_name = txt1_real + '&' + txt2_real
os.rename(path + r'文件 (1).pdf', path + r'{}.pdf'.format(file_name))
至此我們就完成了需求的一大步,接下來只需要借助 glob 模塊遍歷目標(biāo)文件夾,對(duì)獲取的每一個(gè)文件執(zhí)行上面的操作即可,這樣就將全部需求完成,所有的PDF均按照指定字段進(jìn)行重命名
本文的分享就到這里,上面的 Python辦公自動(dòng)化 案例可以擴(kuò)展到很多使用場景(核心為提取PDF指定內(nèi)容+批量重命名),大家可以自己找一些文件測試學(xué)習(xí),如果對(duì)你有所幫助可以給本文來一波三連~
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03