python工具箱之excel處理

經常會將數據保存為excel格式方便閱讀或者從excel讀取數據進行處理. 這裡對一些excel操作進行整理, 在需要的時候拈來即用.

python有很多處理excel的包, 這裡介紹一下Tablib,並對其進行封裝方便進一步使用.

Tablib

下面看一個只有單個sheet的excel是如何完成的. 代碼如下:

# -*- coding: utf-8 -*-import tablibdata = tablib.Dataset(headers=[u姓名, u籍貫, u年齡], title=u"個人信息")data.append((u劉德華, u中國, 50))data.append_separator(u--------------分割線----------------)data.append((u金智賢, u韓國, 30))with open("data.xls", "wb") as f: f.write(data.xls)

執行結果為:

是不是很簡單. 在看一下讀取是如何實現的:

# -*- coding: utf-8 -*-import tablibdata = tablib.Dataset().load(open(data.xls, "rb").read(), "xls")print data.headers # 表頭,也就是第一行print data[u年齡] # 年齡這一列數據for row in data: # 遍歷除頭以外的行 print row

一切感覺都是那麼自然簡單. 下面在看一下如何操作多個sheet:

# -*- coding: utf-8 -*-import tablibdata1 = tablib.Dataset(headers=[u姓名, u籍貫, u年齡], title=u"個人信息")data1.append((u劉德華, u中國, 50))data1.append_separator(u--------------分割線----------------)data1.append((u金智賢, u韓國, 30))data2 = tablib.Dataset(headers=[u歌手, u歌曲], title=u"歌星信息")data2.append((u許嵩, u斷橋殘雪))data2.append_separator(u--------------分割線----------------)data2.append((u周杰倫, u公公偏頭痛))book = tablib.Databook((data1, data2))with open("data.xls", "wb") as f: f.write(book.xls)

執行結果如圖:

看到沒,操作多個sheet還是那麼簡單. 讀取操作也是一樣的簡單:

# -*- coding: utf-8 -*-import tablibdatas = tablib.Databook().load("xls", open(data.xls, "rb").read())print len(datas.sheets()) # sheet個數data = datas.sheets()[1] # 選取第二個sheetprint data.headers # 表頭,也就是第一行print data[u歌曲] # 年齡這一列數據for row in data: # 遍歷除頭以外的行 print row

封裝操作

為了更方便的使用,我對它進行了封裝.當然你也可以自己基於此封裝以更符合自己需求.

寫操作

# -*- coding: utf-8 -*-import tablibclass ExcelWriter(object): """ Excel寫,支持多sheet,例子: ex = ExcelWriter("test.xls") ex.add_data("演員列表", ["姓名"], [["周星馳"], ["周潤發"]]) ex.add_data("影視列表", ["影視", "演員"], [["上海灘", "周潤發"], ["大話西遊", "周星馳"]]) ex.save() """ def __init__(self, xls_file): self.datas = [] self.xls_file = xls_file def add_data(self, title, headers, rows): data = tablib.Dataset(title=title) data.headers = headers for row in rows: data.append(row) self.datas.append(data) def save(self): book = tablib.Databook(self.datas) with open(self.xls_file, wb) as f: f.write(book.xls)

讀操作

class ExcelReader(object): """ reader = ExcelReader("test.xls") print reader[1].headers for row in reader[1]: print row """ def __init__(self, xls_file): self.xls_file = xls_file self.sheets = [] self.__load_data() def __load_data(self): datas = tablib.Databook().load("xls", open(self.xls_file, "rb").read()) self.sheets = datas.sheets() def __getitem__(self, index): assert index < len(self.sheets) return self.sheets[index] @property def sheet_count(self): return len(self.sheets)

上面代碼可以在這裡下載

結束語

相信大家看了上面的例子也忍不住去使用一下tablib了. 上面只是使用了一些基本的方法, 還有很多更強大的功能,比如支持導出csv、json、yaml等格式的數據. 我只是針對excel一種情況進行了使用. 更多功能等待大家去探索.

推薦閱讀:

OpenCV3計算機視覺 Python語言實現(4)
Python 數據分析(二):向量計算
Python正則表達式
有沒有什麼很好的 Tornado 的教材或者開源項目可以做參考的?
想要用 python 做爬蟲, 是使用 scrapy框架還是用 requests, bs4 等庫?

TAG:Python | MicrosoftExcel |