尋覓工具
確定任務(wù)之后第一步就是找個(gè)趁手的庫(kù)來(lái)干活。 Python Excel上列出了xlrd、xlwt、xlutils這幾個(gè)包,但是
它們都比較老,xlwt甚至不支持07版以后的excel
它們的文檔不太友好,都可能需要去讀源代碼,而老姐的任務(wù)比較緊,加上我當(dāng)時(shí)在期末,沒(méi)有這個(gè)時(shí)間細(xì)讀源代碼
再一番搜索后我找到了openpyxl,支持07+的excel,一直有人在維護(hù),文檔清晰易讀,參照Tutorial和API文檔很快就能上手,就是它了~
安裝
這個(gè)很容易,直接pip install openpyxl,呵呵呵~
因?yàn)槲也恍枰幚韴D片,就沒(méi)有裝pillow。
一些考慮
源文件大約一個(gè)在1~2MB左右,比較小,所以可以直接讀入內(nèi)存處理。
既然是處理excel,何況他們整個(gè)組顯然都是win下干活(數(shù)據(jù)都用excel存了= =,商科的人啊……),這個(gè)腳本還是在win下做吧
這個(gè)任務(wù)完全不需要我對(duì)現(xiàn)有的文件做修改!囧……我只要讀入、處理、再寫(xiě)出另一個(gè)文件就行了
學(xué)習(xí)使用
嗯,就是打開(kāi)cmd,然后用python的shell各種玩這個(gè)模塊來(lái)上手……(win下沒(méi)有裝ipython,囧)
做這個(gè)小腳本基本上我只需要import兩個(gè)東西
from openpyxl import Workbookfrom openpyxl import load_workbook
load_workbook顧名思義是把文件導(dǎo)入到內(nèi)存,Workbook是最基本的一個(gè)類(lèi),用來(lái)在內(nèi)存里創(chuàng)建文件最后寫(xiě)進(jìn)磁盤(pán)的。
干活
首先我需要導(dǎo)入這個(gè)文件
inwb = load_workbook(filename)
得到的就是一個(gè)workbook對(duì)象
然后我需要?jiǎng)?chuàng)建一個(gè)新的文件
outwb = Workbook()
接著在這個(gè)新文件里,用create_sheet新建幾個(gè)工作表,比如
careerSheet = outwb.create_sheet(0, 'career')
就會(huì)從頭部插入一個(gè)叫career的工作表(也就是說(shuō)用法類(lèi)似python list的insert)
接下來(lái)我需要遍歷輸入文件的每個(gè)工作表,并且按照表名做一些工作(e.g.如果表名不是數(shù)字,我不需要處理),openpyxl支持用字典一樣的方式通過(guò)表名獲取工作表,獲取一個(gè)工作簿的表名的方法是get_sheet_names
for sheetName in inwb.get_sheet_names(): if not sheetName.isdigit(): continue sheet = inwb[sheetName]
得到工作表之后,就是按列和行處理了。openpyxl會(huì)根據(jù)工作表里實(shí)際有數(shù)據(jù)的區(qū)域來(lái)確定行數(shù)和列數(shù),獲取行和列的方法是sheet.rows和sheet.columns,它們都可以像list一樣用。比如,如果我想跳過(guò)數(shù)據(jù)少于2列的表,可以寫(xiě)
if len(sheet.columns) < 2: continue
如果我想獲取這個(gè)工作表的前兩列,可以寫(xiě)
colA, colB = sheet.columns[:2]
除了用columns和rows來(lái)得到這個(gè)工作表的行列之外,還可以用excel的單元格編碼來(lái)獲取一個(gè)區(qū)域,比如
新聞熱點(diǎn)
疑難解答
圖片精選