Tablib是一個Python的第三方數(shù)據(jù)導(dǎo)出模塊,它支持以下文件格式的導(dǎo)出:
- Excel
- JSON
- YAML
- Pandas DataFrames
- HTML
- Jira
- TSV
- ODS
- CSV
- DBF
其實(shí)這個工具能做到的東西,Pandas都能做到,但是有時候Pandas實(shí)在是過重了,如果我們只想實(shí)現(xiàn)輕量數(shù)據(jù)的導(dǎo)出,而非上千萬級別的數(shù)據(jù)導(dǎo)出,該工具更能體現(xiàn)它的優(yōu)勢。
1.準(zhǔn)備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上噢,如果沒有,請?jiān)L問這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
Windows環(huán)境下打開Cmd(開始—運(yùn)行—CMD),蘋果系統(tǒng)環(huán)境下請打開Terminal(command+空格輸入Terminal),準(zhǔn)備開始輸入命令安裝依賴。
當(dāng)然,我更推薦大家用VSCode編輯器,把本文代碼Copy下來,在編輯器下方的終端裝依賴模塊,多舒服的一件事?。?a href="http://www.www27dydycom.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 則說明安裝成功。
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對象
這樣相當(dāng)于構(gòu)造了一張表:
first_name | last_name |
---|---|
John | Adams |
George | Washington |
其中最重要的就是Dataset對象,當(dāng)然該對象的創(chuàng)建也可以不輸入?yún)?shù),直接
data = tablib.Dataset()
創(chuàng)建出一個Dataset對象,然后通過
data.headers = ['first_name', 'last_name']
設(shè)置表頭,當(dāng)然也可以使用 data.headers = ('first_name', 'last_name'), 因?yàn)椴还苁怯昧斜磉€是元組,tablib都會自動幫我們處理好,我們可以通過
data.append(['Henry', 'Ford'])
# 或data.append(('Henry', 'Ford'))
來向表中添加一條記錄。
我們可以通過data.dict來查看目前表中的所有數(shù)據(jù):
也可以通過print(data)顯示更人性化的輸出:
Dataset屬性
data.height輸出當(dāng)前記錄(行)總數(shù)
data.width輸出當(dāng)前屬性(列)總數(shù)
常用方法
詳情可見官方文檔:
https://tablib.readthedocs.io/en/stable/api/#tablib.Dataset.remove_duplicates
lpop(), lpush(row, tags=[]), lpush_col(col, header=None)是對列的相關(guān)操作
pop(), rpop(), rpush(row, tags=[]), rpush_col(col, header=None)是對行的相關(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 |
對記錄操作
> >> print(data[:2])
[('John', 'Adams', 90), ('George', 'Washington', 67)]
> >> print(data[2:])
[('Henry', 'Ford', 83)]
對屬性操作
刪除記錄
可見記錄也是從0開始索引的
刪除記錄操作也支持切片, 即 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)制形式打開文件
dbf:
>> > with open('people.dbf', 'wb') as f:
... f.write(data.dbf)
高級使用
動態(tài)列
可以將一個函數(shù)指定給Dataset對象
函數(shù)的參數(shù)row傳入的是每一行記錄,所以可以根據(jù)傳入的記錄進(jìn)行更一步的計(jì)算:
tag
可以給記錄添加tag,之后通過tag來過濾記錄:
3.舉個小例子
現(xiàn)在有一個場景,我們需要將一份股票數(shù)據(jù)csv文件轉(zhuǎn)化為json數(shù)據(jù):
你只需要這樣操作:
即可將其轉(zhuǎn)化為json格式,顯然,它的特點(diǎn)在于輕量、簡單。如果用Pandas來做這樣的轉(zhuǎn)化,則有些大材小用。
-
模塊
+關(guān)注
關(guān)注
7文章
2788瀏覽量
50346 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7255瀏覽量
91819 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86700
發(fā)布評論請先 登錄
Labview如何內(nèi)嵌操作第三方EXE程序!
如何把第三方庫加到PROTEUS中?
第三方dll調(diào)用問題!??!
LabVIEW與第三方軟件交互問題
國內(nèi)知名第三方檢測認(rèn)證機(jī)構(gòu)排名
Detectron訓(xùn)練第三方數(shù)據(jù)集測試
關(guān)于LabVIEW調(diào)用第三方exe,如何去控制第三方exe按鈕的問題
頭文件中包含第三方文件
銀行和第三方支付:戀愛進(jìn)行時
第三方腳本成為網(wǎng)絡(luò)攻擊“重災(zāi)區(qū)”,多管齊下防范第三方腳本安全隱患
GeoPandas:針對地理數(shù)據(jù)做了特別支持的第三方模塊

評論