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