用 Python 自動化辦公能做到哪些有趣或有用的事情?

最近聽朋友講了他的故事,感觸很深,今天分享給大家共勉:

我想介紹一下我是如何從每天工作8小時,進化成每天工作10分鐘的。

不涉及太多的技術細節,畢竟知乎是一個分(現)享(編)知(故)識(事)的地方

0.先自我介紹一下:

我不是程序員,大學學的也不是IT專業。

我在一個主要業務是成品糧交易的企業工作,我的崗位的主要工作就是製作各類數據統計報表、臺賬、數據圖表等等,反正就是各類日報,每天都要做一遍,此外還有什麼週報月報什麼的……這個崗位之前的同事,每天至少要花3.5到4個小時去折騰Excel,使用數據透視圖、vlookup、其他各類函數去做出一份內含3000多個數據的日報。如果領導臨時安排什麼工作的話,那就要加班從浩如煙海的數據裡找領導要的東西了。


用 Python 自動化辦公能做到哪些有趣或有用的事情?


1.噩夢開始時:

我剛接手工作時,我們有一個巨大的,達70多M的Excel文件,每次公司配發的破電腦打開就需要小二十分鐘,裡面存著我們近十年的採購的每一車的詳細信息……然後裡面的數據格式還都是混亂的,

打個比方,比如我們有個供貨商全名叫:ABCD有限責任公司,

那麼這個Excel中會存有

AB公司、

AB有限公司、

CD有限責任公司、

CD責任有限公司、

ACBD有限公司

ABD公司

等等等等名字

在我第一天看到這個Excel的時候

後來交接的同事告訴我,她用的Excel的 vlookup 函數,當匹配不上的時候,就手工搜索……

然後……我……


用 Python 自動化辦公能做到哪些有趣或有用的事情?


就這樣,經歷了噩夢般的幾個月……

等到了2017年年初,看到一個詞:

圖靈完備。

一個圖靈完備的語言理論上能解決任何算法。

|

|

V

顯然,Python是一種圖靈完備的語言。

|

|

V

那Python應該在理論上能替我處理所有事情(生孩子應該不行~~)

|

|

V

我為什麼不試著用Python去替我完成工作呢?

2.走了一些彎路,但勝過原地踏步

我的第一步是從數據清洗開始的。(當然那時並不知道這個叫數據清洗)

先把剛才說的那個70M的Excel導成csv,去掉了其中不必要的格式、樣式、對象等。

然後我想統一一下各個數據的標準名稱,剛才說了,由於經手的人太多,同一個數據,怎麼表述的都有,幾十萬的數據量,人工交叉比對的話顯然是不現實的。(後來才知道了笛卡爾積這個詞)

我第一步先使用了Excel自身的去重功能,將所有的供貨商名稱進行了一個去重,剩下了大概5000個左右的名稱。

然後,作為一個懶人,我肯定不會用人工去比對了。

Python有一個庫,叫做fuzzywuzzy,用它來進行模糊匹配。

<code>

from

fuzzywuzzy

import

fuzz

print

( fuzz.ratio(

"內容1"

,

"內容2"

))/<code>

會輸出一個0——100的數字,數字越大代表這兩個內容越相似。

所以我就寫了一個循環,把這5000多個項目裡面,匹配度超過70%以上的數據組都篩了出來,再去Excel裡面手工替換(沒辦法,那時候還不會操作Excel)

然後整理了一下各個行列的位置,這樣我就有了一個相對準確的數據源。

後來思考了一下,把數據存在Excel裡面不是個長久之計啊,畢竟幾十萬數據呢,就想把數據導入到數據庫裡。大學時候考過計算機二級的Access(當然,雖然我考過,但是沒考過……),就想導入Access,可是那個Python庫沒弄明白,硬是讀不出來,就卡死了。

後來想到,之前自己從網上下載的某某私服的一鍵端裡,有個MySQL數據庫的一鍵啟動方式,試了試居然能用,就把那個MySQL程序整個拷出來、清乾淨,作為了我的數據庫。(當時想學怎麼自己配置MySQL來著,沒研究明白……這個數據庫也就是我們現在提供的MySQL數據庫的前身,當然了,我們現在提供的是重新制作的無毒的船新版本)

用 Python 自動化辦公能做到哪些有趣或有用的事情?

然後就是使用Navicat導入Excel,使用pymysql庫進行讀取,這樣,咱也是趁數據庫的人了~

接下來,就是要進行數據分析了,由於當時沒學會pandas,數據透視圖的效果死活做不出來,不得已,只好新建N個列表,用一堆if...else... ,把同類數據存入同一個列表中,求和,求平均值之類的(笨辦法也是辦法,能抓住耗子就是好貓,先把程序跑起來能用就好

分析出了結果,要寫入excel了,但是由於沒有研究明白怎麼進行追加寫入(xlutils庫各種限定太多了……),只好使用xlwt把數據寫到一個空Excel中,然後手工把一整片複製粘貼過去……反正也是解決了……能用了……

因為每天的倉庫返回的數據還要向數據庫裡追加,就寫了個錄入程序,先用xlrd讀取、然後fuzzywuzzy模糊匹配、最後pymysql寫入。

這時候,我的工作已由每天七八個小時,進化到了每天4小時左右

(這一部分代碼就不貼了,祖傳代碼向來被稱為屎山,這些代碼也是簡陋的過分的那種……)

3.走上雜務工作的快車道

羅伯特·清琦寫的那本《富爸爸窮爸爸》提出過一個概念,當你實現財務自由以後,你的財富積累就會走上良性循環的快車道,你的就會越來越容易提高被動收入。

同理,當你實現一部分的工作自動化以後,你就會走上一個“工作自由”的快車道,因為你有更多的時間能用來研究如何去更高效的完成餘下的那堆工作,然後,每天工作的時間就會越來越短。

為什麼上文中我有那麼多括號寫的各種搞不定?因為沒時間啊!

現在好了,每天的工作時間已經被我砍了一半了,那麼我就可以思考,如何解決各類的技術問題。

我學會了Excel的各種庫,比如xlrd、xlwt、xlsxwriter、openpyxl、xlwings、win32com,能根據自己的需要選擇需要用的庫;還學會了同屬Office系列的python-docx和python-pptx,開始嘗試自動製作Word和PPT;學會了自動發郵件的stmp庫、zmail庫;學會了能操作微信發消息的itchat;學了爬蟲、學瞭解壓縮、學了調整圖片大小、學了Word轉pdf等等等等很多庫或者功能。

隨著學習,每天的工作時間越來越短……

現在,我每天的工作,只需要十分鐘,最快記錄四分鐘,就能完成。

每天上班,第一件事,優雅的運行一個py文件,一堆import後面,只有

用 Python 自動化辦公能做到哪些有趣或有用的事情?

就完成了日常工作,然後就是需要打印,手籤,送各領導審閱的過程了。

一個保守的、傳統的、幾十年都不會起一絲波瀾的國有企業,硬生生被我幹出來了一個IT崗,升職加薪都已達成。

4、後續的思考

現在,我能極快的完成每天的工作,而後就是大片的學習思考的時間。

如今,

我已經,

我已經,

我已經,

把數據庫移到了一臺淘汰下來的辦公電腦上,又用另外一臺設備,作為公共聯網數據庫;

我已經,

用pyqt寫了一個帶gui的數據輸出軟件,所有同事都可以自由輸出數據進行分析了;

我已經,

用pandas、matplotlib寫了一個自動生成數據分析圖片的軟件,再做月報、週報什麼的彙報材料,不用再通過Excel手工作圖了;

我已經,

用pandas、matplotlib配合pyqt寫了一個入庫分析軟件,大家輸入時間段和限定條件後一鍵進行數據分析了,不會有同事老找我要數據了;

我已經,

用xlrd、python-docx寫了一個合同生成器,旺季採購的同事不用焦頭爛額的改合同了;

我已經,

用numpy配合pyqt做了一個購銷存平衡軟件,可以讓領導們在決策時通過拖動滑塊就可以實時展現不同購、銷情況下庫存情況了;

我已經,

用爬蟲配合pymysql寫了一個實時糧價獲取數據庫,告別了瀏覽網頁逐行復制價格的方式

未來,

我計劃做一個公司內部網站,把之前的所有C/S架構的軟件都改成B/S。

未來,

我計劃做一個數據駕駛艙,供領導決策使用。

未來,

我計劃做一個訪客人臉識別,方便在重要客戶進大門以後提醒領導到門口迎接。

未來,

我計劃做一個更智能的爬蟲,能在網上自動收集市場信息。

未來,

我計劃做一個更智能的進銷存平衡軟件,能使用最優化進行購銷平衡計算。

未來,

我計劃做一套發票管理系統給財務、一套物料管理系統給物資、一套工資系統給HR……

那麼,你的未來,是每天繼續做著重複的工作,還是從工作中解放自己,去擁抱更大的世界呢。

如果你也正在自學python,python自學基礎教程送你參考:


用 Python 自動化辦公能做到哪些有趣或有用的事情?


分享到:


相關文章: