Python辦公自動化-1分鐘處理500多份報告坏为!媽媽再也不用擔心我要加班啦

最近南方的天氣燥熱煩悶。每天下班時頭上還頂著大太陽镊绪。這么早也沒啥事匀伏,就想著喊上隔壁村的二狗子去擼串『拢可是喊了幾次都沒來够颠,一問才知道,這小子最近天天加班榄鉴。
“現(xiàn)在生產(chǎn)都還沒完全恢復履磨,你們咋這么忙呢蛉抓?” 這個二狗子在一家電子廠做質檢員
’唉,別提了巷送。前段時間我們供給A客戶的一批支架出了點問題⌒︴耍現(xiàn)在客戶要求每批貨的抽檢數(shù)量從10個漲到50個“
”那又不用你來檢堡牡,你加個毛線班啊 “
”老哥有所不知啊杨刨,自從出了問題我們領導被客戶叼了一頓后,讓我每天把測量室給的幾百份測量報告整理出來芥颈,把這些抽檢零件的關鍵尺寸統(tǒng)計匯總出來并可視化爬坑,美其名曰看趨勢涂臣,主動預防。我每天下班就忙著把幾百份報告的各種數(shù)據(jù)抄錄到excel,別提多痛苦了署辉!昨天搞得太晚哭尝,抄錯了幾個,今天又被臭罵一頓材鹦。我都快崩潰了桶唐,這活哪是人干的呀尤泽!“

聽二狗子這么一訴苦,我倒有點同情他了安吁。不過他說的沒錯鬼店,抄錄幾百份報告這活確實不是人干的妇智!耗費精力不說氏身,還非常容易出錯蛋欣。

”你那報告長啥樣子,拍個圖片給我看看到踏?我看看能不能擼一段代碼幫你搞定窝稿≡涞啵“

”那敢情好白!“
說完二狗子便發(fā)了一份文檔給我秉馏,我一看是個pdf的文件脱羡。一般的產(chǎn)品檢驗報告都是pdf檔
部分截圖如下(敏感信息已遮蔽)

image.png

圖片上highlight出來的信息就是要提取的帆竹。一個是產(chǎn)品測量的特征栽连,例如這里的Diameter(直徑),下面是測量的結果12.2999绢陌。

每份文件代表一個零件脐湾,每個零件要測的尺寸都在報告里面叙淌,500多個文檔就是500多個零件。二狗子要做的工作就是把這500多份pdf文檔里面的數(shù)據(jù)整理到excel里面闻鉴,這樣可以用excel分析一下尺寸的變化趨勢孟岛。臥槽督勺,這要是手工來抄錄,假設一個零件要統(tǒng)計10個尺寸堵未,你把這10個尺寸copy到excel,在加上文件打開關閉盏触,怎么著也要30秒。500多份妥妥的要大半天時間雌芽!

”你這個簡單世落,我晚上回去幫你搞定糟需!“ 我一看這個重復勞動非常適合用Python來做≈扪海現(xiàn)在很多辦公文員都上了Python辦公自動化了杈帐,怎么這個二狗子還在加班干這個专钉。太沒前途了跃须!這個忙我得幫菇民,不過不能白幫玉雾,搞完了得讓他請吃飯轻要。

”真的啊冲泥,太感謝你了老哥凡恍。搞好了嚼酝,明天請你喝酒擼串串闽巩!“
”必須滴担汤!“

好了崭歧,說干就干。
因為是個小項目率碾,犯不著用Pycharm來開發(fā)所宰,直接上Jupyter,可以順著思路一邊做一遍調試垒酬。
首先總體思路:

  1. 先調試一個文檔矮湘,把一個pdf文檔里面的內容摳出來口糕,
  2. 在加上批處理邏輯景描,處理整個文件夾下的所有pdf檔

對于一個pdf文檔超棺,思路是先pdf 轉成excel,在提取出需要的信息(測量特征和數(shù)值)棠绘,在把信息寫入一個新建的文檔氧苍。
就是這么簡單夜矗!但是這里要用到一個處理pdf的第三方庫,pdfplumber让虐。這貨功能很強大紊撕,可以抓取pdf文檔中的文字,表格等赡突。

import pandas as pd
import pdfplumber
path = '20200702-215_NO.1.pdf' # 要處理的pdf文件
pdf = pdfplumber.open(path)
print(pdf.pages) #查看是否能將pdf文件順利打開
>>>[<Page:1>, <Page:2>]

測量報告確實有兩頁对扶,沒問題。
然后提取表格麸俘。這里出了點問題辩稽,使用extract_tables()的時候,提取到的是一個空的列表从媚。我估計是原始的pdf文件中雖然內容是按照表格的形式來的逞泄,但是沒有豎向的分割線,沒有作為表格來處理拜效。那也容易到千,直接提取所有的text也可以!
先把2頁text合并在處理潜支。合并后將每一行打印出來看看效果络断,并思考如何提取需要的信息:

pages = len(pdf.pages)
for i in range(1,pages):
    all_text = pdf.pages[0].extract_text() + pdf.pages[i].extract_text()
all_text.split('\n')

效果如下,對照原始文檔查看一下臣嚣,信息都全了。

image.png

下面就是提取測量特征(diameter/roundness)和測試值了蘸际。這個也簡單,因為在Python中字符串str有N多種操作,只要你能想到的都能搞定。
稍微思考一下喷橙,將text的所有內容按照換行符裂成個列表后逊躁,測量特征是以Diameter等開頭的元素,這個元素的下一個就是值。按照這個邏輯哮独,提取測量特征后分飞,或者該特征元素在列表中的index, 這個index+1就是測量值的位置染服!so easy!

# 獲取所有測量特征诚亚,作為item
item = [u for u in all_text.split('\n') if u.strip().startswith(('Diameter','Roundness'))]
# values用來記錄測量值
values = [] 
for i in item:
    j = all_text.split('\n').index(i)
    value = all_text.split('\n')[j+1]
    value = value.strip().split(' ')[0]
    values.append(value)
    print(i)
    print(value)

結果如下:


image.png

所有值都有了夷家,完美义屏!
在創(chuàng)建一個DataFrame數(shù)據(jù)框兄墅,將數(shù)據(jù)存入就處理完單個文檔了五督。這里需要思考一下DataFrame的結構碌燕。因為我們的目的是統(tǒng)計所有零件的所有測量特征數(shù)據(jù)值慈鸠。按照一般的二維數(shù)據(jù)結構青团,一行代表一個零件娃肿,一列代表這些零件的一個特征珠十,這樣每處理一個文檔嫂伞,就在DataFrame種增加一行帖努。因為這些零件的測量值特征都是相同寡润,只有測量值會有差異变抽。好了,就這么處理融蹂。

# 創(chuàng)建一個Dataframe來存儲數(shù)值
df = pd.DataFrame(columns= item, index = None)
df.loc['first'] = values
df

效果如下:


image.png

這里,以first作為第一個零件的index寫入区拳,實際操作中可以直接以文件名來命名拘领。至此,處理單個文件結束樱调。下面在整個處理流程的外層嵌套一個批處理程序就大功告成了约素!

批處理邏輯也非常簡單,把所有的測量文檔都放到同一個文件夾下笆凌,調用os模塊讀取所有文件圣猎,這樣就把所有的文件名存入一個列表了。在調用上面的邏輯遍歷這個列表就把所有的測量數(shù)據(jù)寫進去了就完事了乞而。這個比較簡單送悔,這里就不羅嗦了,直接上代碼和效果:

import os
files = os.listdir()
all_part = [f for f in files if f.endswith(('pdf'))]
all_part

上面是讀取所有pdf文檔爪模,并將文件名放入列表all_part欠啤,結果如下:


image.png

在遍歷這個列表,即可收集統(tǒng)計完所有數(shù)據(jù)屋灌,最后的效果如下:


image.png

效果還可以洁段。最后在調用pandas的to+excel即可將數(shù)據(jù)寫入文件,存入硬盤共郭,任務處理完畢祠丝。我用二狗子給我的30多個文檔跑了一下,我的老機器基本上5-6秒出結果除嘹。好一點的機器幾百個文檔1分鐘以內也就搞定了写半!當我把這個消息告訴二狗子后,二狗子喜出望外憾赁,我在電話那頭似乎都能感覺到小子鼻涕泡都樂出來了污朽!

第二天還沒下班二狗子電話就來了。
“走龙考,老哥,羊肉串去矾睦!”
“怎么今天不加班了嗎晦款?”
“嗨,測量室4點給我報告枚冗,我撒泡尿的功夫回來一看數(shù)據(jù)就整理好了缓溅,交給老板后,老板破例讓允許我提前下班赁温。今天正好討教討教學學Python坛怪,這丫的威力太強大了淤齐!perfect!”

以上故事純屬虛構。
不過從這個小案例我覺得作為一個工程師袜匿,在解決實際問題時要修煉自己的兩種核心能力:
第一更啄,善于將具體的問題抽象成一個模型。只有抽象成模型后居灯,我們才能調用我們學習的知識來解決祭务。我們學習的線性代數(shù),矩陣怪嫌,物理方程义锥,面向對象編碼等都是高度抽象化的東西,和現(xiàn)實中的實際問題是有一個鴻溝的岩灭。將實際問題轉化成一個模型在和學習過的知識去類比拌倍,尋找最可能的解決方案。這個套路也最終印證了知識源于實踐噪径,并指導實踐的終極真理贰拿。
第二,集成創(chuàng)新熄云,解決問題膨更。如果問工業(yè)社會最偉大的創(chuàng)新是什么?我會毫不猶豫的回答是流水線缴允。流水線是人類社會分工協(xié)作最極致的體現(xiàn)荚守。能在最大范圍調用更多人參與你的分工協(xié)作中,你就越有可能創(chuàng)造更大的價值练般。能夠把一個大問題分解成若干模塊矗漾,在各個擊破之后組裝到一起做成一個Pipeline,這就是一個解決方案的流水線薄料。例如在上面這個案例中涉及到和操作系統(tǒng)交互的os模塊, 處理數(shù)據(jù)以及和excel交互的pandas, 以及最核心的pdf的處理模塊pdfplumber, 這些模塊的具體細節(jié)我都不知道敞贡。我只要知道有這個模塊,可以完成相應的功能摄职。在借助文檔學會調用它的接口即可誊役。
這就像搭積木一樣,搭建一個解決問題的流水線 :從讀取pdf到text —》處理text谷市,提取需要的信息 —》信息寫入excel 在重復這個過程蛔垢。就形成了一個完整的解決方案,就就是集成的概念迫悠。善于將不同的事物/知識/經(jīng)驗組合來解決新的問題鹏漆,這種工程師能力我感覺很有前途,以后要廣泛涉獵和學習,來增強這方面的能力艺玲。

注:以上文中涉及到的代碼已經(jīng)上傳到github: https://github.com/liyongchao911/pdf2excel, 歡迎star,歡迎fork!
另外括蝠,也可以微信搜索關注公眾號:‘Python數(shù)據(jù)科學家之路“ 和我交流

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饭聚,隨后出現(xiàn)的幾起案子忌警,更是在濱河造成了極大的恐慌,老刑警劉巖若治,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慨蓝,死亡現(xiàn)場離奇詭異,居然都是意外死亡端幼,警方通過查閱死者的電腦和手機礼烈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婆跑,“玉大人此熬,你說我怎么就攤上這事』” “怎么了犀忱?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扶关。 經(jīng)常有香客問我阴汇,道長,這世上最難降的妖魔是什么节槐? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任搀庶,我火速辦了婚禮,結果婚禮上铜异,老公的妹妹穿的比我還像新娘哥倔。我一直安慰自己,他們只是感情好揍庄,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布咆蒿。 她就那樣靜靜地躺著,像睡著了一般蚂子。 火紅的嫁衣襯著肌膚如雪沃测。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天缆镣,我揣著相機與錄音芽突,去河邊找鬼。 笑死董瞻,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播钠糊,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼挟秤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抄伍?” 一聲冷哼從身側響起艘刚,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎截珍,沒想到半個月后攀甚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡岗喉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年秋度,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钱床。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡荚斯,死狀恐怖,靈堂內的尸體忽然破棺而出查牌,到底是詐尸還是另有隱情事期,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布纸颜,位于F島的核電站兽泣,受9級特大地震影響,放射性物質發(fā)生泄漏胁孙。R本人自食惡果不足惜唠倦,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浊洞。 院中可真熱鬧牵敷,春花似錦、人聲如沸法希。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苫亦。三九已至毛肋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屋剑,已是汗流浹背润匙。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唉匾,地道東北人孕讳。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓匠楚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厂财。 傳聞我的和親對象是個殘疾皇子芋簿,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345