告別單調(diào)工作系列——利用python再次拯救漂亮妹子

python20180815.jpg

上一篇告別單調(diào)工作系列——利用python拯救漂亮妹子中「拯救」了漂亮妹子之后,原本以為事情告一段落,哪知道......

起因

記得幫妹子搞定自動提交表單之后的第三天,妹子端著奶茶樂呵呵的來找我,和我一番暢談理想,又指點江山之后,終于切入了正題。

大致的意思就是通過excel自動提交表單數(shù)據(jù)你幫我搞定了,你好厲害,現(xiàn)在整理excel的工作我也不是很想做,你有沒有辦法幫我搞定,搞定之后不會虧待你的,奶茶一定雙手奉上。

碰到這樣的事情其實我的內(nèi)心是拒絕的,這明顯有點‘貪得無厭’,不知道什么叫見好就收嗎?

可是,誰叫人家妹子長得漂亮呢,嘴巴又甜,被她這么忽悠了幾下,習(xí)慣性的開始調(diào)研起需求來了,哎,這職業(yè)習(xí)慣得改改。

經(jīng)過

聊了十幾分鐘之后,大致了解了需求,其實就是有幾個部門每天會發(fā)來固定的excel,她需要根據(jù)一定的要求整理匯總,有問題的數(shù)據(jù)聯(lián)系對應(yīng)的人去處理,沒有問題的數(shù)據(jù)再錄入到系統(tǒng)。

要了excel模板和具體的整理規(guī)則之后,漂亮妹子樂呵呵的走了,我有點后悔,又要犧牲自己的下班時間了,哎,好人難做啊。

理了下思路,其實解決這個需求不是很難。

首先先約定好規(guī)則,包括excel的命名,存放路徑,excel格式等。其中excel命名和格式已經(jīng)是固定的,不用操太多心。

但存放路徑不定,基本上都是通過郵件來溝通的,原本想去遍歷郵件去獲取附件的,但考慮到無法判斷哪份excel是最終版,所以這一步就算了,讓業(yè)務(wù)自行判斷后放到統(tǒng)一的路徑下。

接下來就是遍歷指定路徑下的excel,根據(jù)業(yè)務(wù)給的數(shù)據(jù)規(guī)則進行整合,整合之后生成一個目標(biāo)excel,一份是正確的數(shù)據(jù),還一份是異常數(shù)據(jù)。

所用到的python模板基本上也是自帶的,加上操作Excel的xlrdxlwt

python操作excel

面對這樣的需求,正好也讓自己復(fù)習(xí)鞏固下python操作excel的幾個模板,記錄下來,供大家參考。

操作excel我主要用xlrdxlwtXlsxWriter這三個模塊,基本可以解決我遇到的所有需求。

xlrd模塊只支持讀取excel,不管是.xls的還是.xlsx的,可以看個簡單的demo:

import xlrd

rd = xlrd.open_workbook("test.xls") #讀取文件
sheets = rd.sheet_names()   #獲取所有sheet名
table = rd.sheet_by_name("sheet1") #通過sheet名獲取名為 sheet1 的表

#遍歷excel,打印出第一列
for i in range(table.nrows):
    print(excelData.col_values(0)[i])

xlwtXlsxWriter模塊,只支持寫excel操作,兩者各有優(yōu)缺點,相對來說XlsxWriter不管從功能上還是性能上都略勝與xlwt,尤其是在支持大文件寫入方面,如果數(shù)據(jù)量非常大,可以啟用constant memory模式,這是一種順序?qū)懭肽J剑玫揭恍袛?shù)據(jù)就立刻寫入一行,而不會把所有的數(shù)據(jù)都保持在內(nèi)存中。

網(wǎng)上有一篇Python Excel技術(shù)比較,大家可以看下,講的比較詳細(xì),各模塊的優(yōu)缺點。

image

至于寫法,其實兩者差不多,直接看下官方文檔即可,這里以xlwt舉例:

import xlwt
# 創(chuàng)建一個workbook 設(shè)置編碼
workbook = xlwt.Workbook(encoding = 'utf-8')
# 創(chuàng)建一個worksheet
worksheet = workbook.add_sheet('Worksheet1')

# 寫入excel
# 參數(shù)對應(yīng) 行, 列, 值
worksheet.write(1,0, label = 'test')

style = xlwt.XFStyle() # 初始化樣式
font = xlwt.Font() # 為樣式創(chuàng)建字體
font.name = 'Times New Roman' 
font.bold = True # 黑體
font.underline = True # 下劃線
font.italic = True # 斜體字
style.font = font # 設(shè)定樣式
worksheet.write(2, 0, 'Unformatted value') # 不帶樣式的寫入

worksheet.write(3, 0, 'Formatted value', style) # 帶樣式的寫入

# 設(shè)置單元格寬度
worksheet.col(0).width = 3333

# 輸入日期
style = xlwt.XFStyle()
style.num_format_str = 'M/D/YY' # Other options: D-MMM-YY, D-MMM, MMM-YY, h:mm, h:mm:ss, h:mm, h:mm:ss, M/D/YY h:mm, mm:ss, [h]:mm:ss, mm:ss.0
worksheet.write(4, 0, datetime.datetime.now(), style)

#添加公式
worksheet.write(5, 0, 5) # Outputs 5
worksheet.write(5, 1, 2) # Outputs 2
worksheet.write(6, 0, xlwt.Formula('A5*B5'))
worksheet.write(1, 1, xlwt.Formula('SUM(A5,B5)')) 

#添加超鏈接
worksheet.write(7, 0, xlwt.Formula('HYPERLINK("http://www.google.com";"Google")'))

# 保存
workbook.save('test.xls')

后記

終于利用下班時間將這個需求搞定了,妹子很開心,但隱隱覺得沒有達到她想要的,也許過幾天,妹子又會樂呵呵的端著奶茶來找我了......

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容