Tablib是一個Python的第三方數(shù)據(jù)導出模塊,它支持以下文件格式的導出:
- Excel
- JSON
- YAML
- Pandas DataFrames
- HTML
- Jira
- TSV
- ODS
- CSV
- DBF
其實這個工具能做到的東西,Pandas都能做到,但是有時候Pandas實在是過重了,如果我們只想實現(xiàn)輕量數(shù)據(jù)的導出,而非上千萬級別的數(shù)據(jù)導出,該工具更能體現(xiàn)它的優(yōu)勢。
1.準備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上噢,如果沒有,請訪問這篇文章:超詳細Python安裝指南 進行安裝。
Windows環(huán)境下打開Cmd(開始—運行—CMD),蘋果系統(tǒng)環(huán)境下請打開Terminal(command+空格輸入Terminal),準備開始輸入命令安裝依賴。
當然,我更推薦大家用VSCode編輯器,把本文代碼Copy下來,在編輯器下方的終端裝依賴模塊,多舒服的一件事啊:Python 編程的最好搭檔—VSCode 詳細指南。
在終端輸入以下命令安裝我們所需要的依賴模塊:
pip install tablib
看到 Successfully installed xxx 則說明安裝成功。
2.基本使用
這一塊,官方文檔已經(jīng)有詳細介紹,這里轉(zhuǎn)載自xin053的翻譯與介紹,有部分修改:
https://xin053.github.io/2016/07/10/tablib%E5%BA%93%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3/
創(chuàng)建Dataset對象
這樣相當于構(gòu)造了一張表:
first_name | last_name |
---|---|
John | Adams |
George | Washington |
其中最重要的就是Dataset對象,當然該對象的創(chuàng)建也可以不輸入參數(shù),直接
data = tablib.Dataset()
創(chuàng)建出一個Dataset對象,然后通過
data.headers = ['first_name', 'last_name']
設置表頭,當然也可以使用 data.headers = ('first_name', 'last_name'), 因為不管是用列表還是元組,tablib都會自動幫我們處理好,我們可以通過
data.append(['Henry', 'Ford'])
# 或data.append(('Henry', 'Ford'))
來向表中添加一條記錄。
我們可以通過data.dict來查看目前表中的所有數(shù)據(jù):
也可以通過print(data)顯示更人性化的輸出:
Dataset屬性
data.height輸出當前記錄(行)總數(shù)
data.width輸出當前屬性(列)總數(shù)
常用方法
詳情可見官方文檔:
https://tablib.readthedocs.io/en/stable/api/#tablib.Dataset.remove_duplicates
lpop(), lpush(row, tags=[]), lpush_col(col, header=None)是對列的相關操作
pop(), rpop(), rpush(row, tags=[]), rpush_col(col, header=None)是對行的相關操作
remove_duplicates()去除重復的記錄
sort(col, reverse=False)根據(jù)列進行排序
subset(rows=None, cols=None)返回子Dataset
wipe()清空Dataset,包括表頭和內(nèi)容
新增列
data.append_col((90, 67, 83), header='age')
這樣表就變成了:
first_name | last_name | age |
---|---|---|
John | Adams | 90 |
George | Washington | 67 |
Henry | Ford | 83 |
對記錄操作
> >> print(data[:2])
[('John', 'Adams', 90), ('George', 'Washington', 67)]
> >> print(data[2:])
[('Henry', 'Ford', 83)]
對屬性操作
刪除記錄
可見記錄也是從0開始索引的
刪除記錄操作也支持切片, 即 del data[1:999] 也是可行的
刪除屬性
del data['Col Name']
導入數(shù)據(jù)
imported_data = tablib.Dataset().load(open('data.csv').read())
導出數(shù)據(jù)
csv:
這樣便可成功將數(shù)據(jù)導出為csv文件。
json:
yaml:
excel:
>> > with open('people.xls', 'wb') as f:
... f.write(data.xls)
注意要以二進制形式打開文件
dbf:
>> > with open('people.dbf', 'wb') as f:
... f.write(data.dbf)
高級使用
動態(tài)列
可以將一個函數(shù)指定給Dataset對象
函數(shù)的參數(shù)row傳入的是每一行記錄,所以可以根據(jù)傳入的記錄進行更一步的計算:
tag
可以給記錄添加tag,之后通過tag來過濾記錄:
3.舉個小例子
現(xiàn)在有一個場景,我們需要將一份股票數(shù)據(jù)csv文件轉(zhuǎn)化為json數(shù)據(jù):
你只需要這樣操作:
即可將其轉(zhuǎn)化為json格式,顯然,它的特點在于輕量、簡單。如果用Pandas來做這樣的轉(zhuǎn)化,則有些大材小用。
-
模塊
+關注
關注
7文章
2714瀏覽量
47509 -
數(shù)據(jù)
+關注
關注
8文章
7048瀏覽量
89077 -
python
+關注
關注
56文章
4797瀏覽量
84727
發(fā)布評論請先 登錄
相關推薦
評論