當(dāng)初學(xué)習(xí)python的原因,除了多掌握一個技能,提升自己的競爭力外,就是想利用python開啟副業(yè),拿它來幫我賺錢!!
醬醬在體驗期就說得學(xué)了python可以做兼職,我是半信半疑的,帶著興趣和和好奇,開始了學(xué)習(xí)之旅
在后來的深入過程中,自己 在工作上受益頗多,提高效率,節(jié)省了很多時間,這個已經(jīng)很值得
比如一鍵給文件夾重命名
又比如下載好的文件自動解壓
越學(xué)習(xí),越覺得python有用,以締凡的python小課作為起點,后面自己也深入去學(xué)習(xí)了SQL,MONGODB數(shù)據(jù)庫,反爬蟲,分布式爬蟲等更加深入的知識
到今天也算學(xué)有小成,想爬的大部分網(wǎng)站都可以高效爬取,下一步也打算把這個技能利用起來,去變成自己的財富。
令我驚喜的是,今天,我開始了這一步。接到了我的第 一個單子:處理一個一百五十多萬行的excel數(shù)據(jù)!
看著挺簡單的,然而
當(dāng)時猶豫 了一下,因為沒有試過處理這么多數(shù)據(jù),心里沒底。但是靚仔我是學(xué)過多任務(wù)的人,不能慫。
拿了一個樣本,簡單理解了一下需求
邏輯很簡單:統(tǒng)計第1列數(shù)據(jù)的重復(fù)次數(shù),并且把對應(yīng)的第2列的值返回。
整理一下思路,最簡單的方法就是,把excel前2列的值讀取,然后構(gòu)建字典,把第1列的值當(dāng)作字典的鍵,第2列的值轉(zhuǎn)換成列表當(dāng)作鍵的值
然后遍歷第1列,判斷鍵是否存在,不存在則新建,存在則把第2列的值追加到值列表中,遍歷完成后再寫入一個新的文件,理論上是可行的,截取了3000多行的數(shù)據(jù)寫了個demo運行驗證了一下,用openpyxl讀取文件,簡單的邏輯操作,運行,得到結(jié)果,非常完美
沒想到這么簡單,正在為問題解決高興,我換了其中一個30萬+的數(shù)據(jù)來處理的時候,程序報錯:
經(jīng)過一番研(bai)究(du),終于定位到問題,原來openpyxl這個庫最 大支持讀取excel文件的行數(shù)是小于16萬行,超過了沒法讀取
正所謂一個庫不行,那就換一個!python的優(yōu)勢就是庫多,所以又把目標(biāo)轉(zhuǎn)向了pandas這個神器
同樣一番操作,pandas雖然處理功能強大,但是導(dǎo)入文件仍然有行數(shù)的限制,問題沒有解決
被困住后,我在考慮要不要把文件拆分成幾個,這樣就可以導(dǎo)入。但是使用代碼自動拆分也行不通,因為根本沒法讀??!
如果手動拆分的話,又太麻煩了,失去了python自動化的意義,而且excel有可能會崩。。。。
這時靈光一現(xiàn),直接讀取excel會被限制,能不能轉(zhuǎn)換成其它格式的文件導(dǎo)入呢?
下意識地就想到了CSV格式,它和xlsx格式相近,都是表格結(jié)構(gòu),而且在excel內(nèi)就支持轉(zhuǎn)換。
于是,我把其中一個文件轉(zhuǎn)換成了CSV格式,導(dǎo)入,處理,一氣呵成
運行一下!成功了,36萬行數(shù)據(jù)竟然不到一分鐘就搞定了?。◇@喜,本來擔(dān)憂的性能問題完全沒有出現(xiàn)!檢查一下內(nèi)容,也沒有問題,順手把四個文件轉(zhuǎn)換成csv格式處理掉。
amazing!不到4分鐘就處理完成了,這個速度是讓我驚訝的!
后來我又試了一下使用excel直接處理這些數(shù)據(jù),果不其然,excel停止響應(yīng)了!
這樣的處理無疑會浪費大量的時間,而且excel崩潰后往往還要重新做,太痛苦??!
相比之下python處理起來就簡單多了!雖然前面走了一點彎路,踩了幾個坑,總體時間也在3小時內(nèi)搞定!
最 后收到酬勞還是美滋滋的,畢竟第 一次用python的技術(shù)賺錢了!
回顧一下整個過程中,不熟悉openpyxl和pandas的導(dǎo)入限制,不斷地檢索和查找原因浪費了部分時間,真正用于寫代碼和運行的時間是很少的
代碼如上圖,幾乎所有的知識點,在學(xué)分表的基礎(chǔ)語法就涵蓋了。
總結(jié)一下,python的確是個有用且值錢的技能,不但在工作中提高效率,而且還能賺點小外快,快去get起來吧!