Tablib是一個(gè)Python的第三方數(shù)據(jù)導(dǎo)出模塊,它支持以下文件格式的導(dǎo)出:
- Excel
- JSON
- YAML
- Pandas DataFrames
- HTML
- Jira
- TSV
- ODS
- CSV
- DBF
其實(shí)這個(gè)工具能做到的東西,Pandas都能做到,但是有時(shí)候Pandas實(shí)在是過(guò)重了,如果我們只想實(shí)現(xiàn)輕量數(shù)據(jù)的導(dǎo)出,而非上千萬(wàn)級(jí)別的數(shù)據(jù)導(dǎo)出,該工具更能體現(xiàn)它的優(yōu)勢(shì)。
1.準(zhǔn)備
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上噢,如果沒(méi)有,請(qǐng)?jiān)L問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
Windows環(huán)境下打開(kāi)Cmd(開(kāi)始—運(yùn)行—CMD),蘋(píng)果系統(tǒng)環(huán)境下請(qǐng)打開(kāi)Terminal(command+空格輸入Terminal),準(zhǔn)備開(kāi)始輸入命令安裝依賴。
當(dāng)然,我更推薦大家用VSCode編輯器,把本文代碼Copy下來(lái),在編輯器下方的終端裝依賴模塊,多舒服的一件事?。?a href="http://m.makelele.cn/outside?redirect=http://mp.weixin.qq.com/s?__biz=MzI3MzM0ODU4Mg==&mid=2247485849&idx=1&sn=ec098cf67a55bd1d61d4513397434c94&chksm=eb25eb10dc52620682db716d206c18b00bd53c01743729a9dea381e1791566a04a06f1fabca5&scene=21#wechat_redirect" target="_blank">Python 編程的最好搭檔—VSCode 詳細(xì)指南。
在終端輸入以下命令安裝我們所需要的依賴模塊:
pip install tablib
看到 Successfully installed xxx 則說(shuō)明安裝成功。
2.基本使用
這一塊,官方文檔已經(jīng)有詳細(xì)介紹,這里轉(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對(duì)象

這樣相當(dāng)于構(gòu)造了一張表:
| first_name | last_name |
|---|---|
| John | Adams |
| George | Washington |
其中最重要的就是Dataset對(duì)象,當(dāng)然該對(duì)象的創(chuàng)建也可以不輸入?yún)?shù),直接
data = tablib.Dataset()
創(chuàng)建出一個(gè)Dataset對(duì)象,然后通過(guò)
data.headers = ['first_name', 'last_name']
設(shè)置表頭,當(dāng)然也可以使用 data.headers = ('first_name', 'last_name'), 因?yàn)椴还苁怯昧斜磉€是元組,tablib都會(huì)自動(dòng)幫我們處理好,我們可以通過(guò)
data.append(['Henry', 'Ford'])
# 或data.append(('Henry', 'Ford'))
來(lái)向表中添加一條記錄。
我們可以通過(guò)data.dict來(lái)查看目前表中的所有數(shù)據(jù):

也可以通過(guò)print(data)顯示更人性化的輸出:

Dataset屬性
data.height輸出當(dāng)前記錄(行)總數(shù)
data.width輸出當(dāng)前屬性(列)總數(shù)

常用方法
詳情可見(jiàn)官方文檔:
https://tablib.readthedocs.io/en/stable/api/#tablib.Dataset.remove_duplicates
lpop(), lpush(row, tags=[]), lpush_col(col, header=None)是對(duì)列的相關(guān)操作
pop(), rpop(), rpush(row, tags=[]), rpush_col(col, header=None)是對(duì)行的相關(guān)操作
remove_duplicates()去除重復(fù)的記錄
sort(col, reverse=False)根據(jù)列進(jìn)行排序
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 |

對(duì)記錄操作
> >> print(data[:2])
[('John', 'Adams', 90), ('George', 'Washington', 67)]
> >> print(data[2:])
[('Henry', 'Ford', 83)]
對(duì)屬性操作

刪除記錄

可見(jiàn)記錄也是從0開(kāi)始索引的
刪除記錄操作也支持切片, 即 del data[1:999] 也是可行的
刪除屬性
del data['Col Name']
導(dǎo)入數(shù)據(jù)
imported_data = tablib.Dataset().load(open('data.csv').read())
導(dǎo)出數(shù)據(jù)
csv:

這樣便可成功將數(shù)據(jù)導(dǎo)出為csv文件。
json:

yaml:

excel:
>> > with open('people.xls', 'wb') as f:
... f.write(data.xls)
注意要以二進(jìn)制形式打開(kāi)文件
dbf:
>> > with open('people.dbf', 'wb') as f:
... f.write(data.dbf)
高級(jí)使用
動(dòng)態(tài)列
可以將一個(gè)函數(shù)指定給Dataset對(duì)象

函數(shù)的參數(shù)row傳入的是每一行記錄,所以可以根據(jù)傳入的記錄進(jìn)行更一步的計(jì)算:

tag
可以給記錄添加tag,之后通過(guò)tag來(lái)過(guò)濾記錄:

3.舉個(gè)小例子
現(xiàn)在有一個(gè)場(chǎng)景,我們需要將一份股票數(shù)據(jù)csv文件轉(zhuǎn)化為json數(shù)據(jù):

你只需要這樣操作:

即可將其轉(zhuǎn)化為json格式,顯然,它的特點(diǎn)在于輕量、簡(jiǎn)單。如果用Pandas來(lái)做這樣的轉(zhuǎn)化,則有些大材小用。
-
模塊
+關(guān)注
關(guān)注
7文章
2837瀏覽量
53283 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7335瀏覽量
94760 -
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90025
發(fā)布評(píng)論請(qǐng)先 登錄
Labview如何內(nèi)嵌操作第三方EXE程序!
如何把第三方庫(kù)加到PROTEUS中?
第三方dll調(diào)用問(wèn)題?。?!
LabVIEW與第三方軟件交互問(wèn)題
國(guó)內(nèi)知名第三方檢測(cè)認(rèn)證機(jī)構(gòu)排名
Detectron訓(xùn)練第三方數(shù)據(jù)集測(cè)試
Python入門(mén)之36常用第三方模塊獲取系統(tǒng)信息psutil
關(guān)于LabVIEW調(diào)用第三方exe,如何去控制第三方exe按鈕的問(wèn)題
頭文件中包含第三方文件
銀行和第三方支付:戀愛(ài)進(jìn)行時(shí)
第三方腳本成為網(wǎng)絡(luò)攻擊“重災(zāi)區(qū)”,多管齊下防范第三方腳本安全隱患
GeoPandas:針對(duì)地理數(shù)據(jù)做了特別支持的第三方模塊
Tablib:一個(gè)Python的第三方數(shù)據(jù)導(dǎo)出模塊
評(píng)論