Tablib:一个Python的第三方数据导出模块

tablib是一个python的第三方数据导出模块,它支持以下文件格式的导出:
exceljsonyamlpandas dataframeshtmljiratsvodscsvdbf其实这个工具能做到的东西,pandas都能做到,但是有时候pandas实在是过重了,如果我们只想实现轻量数据的导出,而非上千万级别的数据导出,该工具更能体现它的优势。
1.准备开始之前,你要确保python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细python安装指南 进行安装。
windows环境下打开cmd(开始—运行—cmd),苹果系统环境下请打开terminal(command+空格输入terminal),准备开始输入命令安装依赖。
当然,我更推荐大家用vscode编辑器,把本文代码copy下来,在编辑器下方的终端装依赖模块,多舒服的一件事啊:python 编程的最好搭档—vscode 详细指南。
在终端输入以下命令安装我们所需要的依赖模块:
pip install tablib看到 successfully installed xxx 则说明安装成功。
2.基本使用这一块,官方文档已经有详细介绍,这里转载自xin053的翻译与介绍,有部分修改:
https://xin053.github.io/2016/07/10/tablib%e5%ba%93%e4%bd%bf%e7%94%a8%e8%af%a6%e8%a7%a3/
创建dataset对象
这样相当于构造了一张表:
first_namelast_name
john adams
george washington
其中最重要的就是dataset对象,当然该对象的创建也可以不输入参数,直接
data = tablib.dataset()创建出一个dataset对象,然后通过
data.headers = ['first_name', 'last_name']设置表头,当然也可以使用 data.headers = ('first_name', 'last_name'), 因为不管是用列表还是元组,tablib都会自动帮我们处理好,我们可以通过
data.append(['henry', 'ford'])# 或data.append(('henry', 'ford'))来向表中添加一条记录。
我们可以通过data.dict来查看目前表中的所有数据:
也可以通过print(data)显示更人性化的输出:
dataset属性data.height输出当前记录(行)总数
data.width输出当前属性(列)总数
常用方法
详情可见官方文档:
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)根据列进行排序
subset(rows=none, cols=none)返回子dataset
wipe()清空dataset,包括表头和内容
新增列data.append_col((90, 67, 83), header='age')这样表就变成了:
first_namelast_nameage
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']导入数据imported_data = tablib.dataset().load(open('data.csv').read())导出数据csv:
这样便可成功将数据导出为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)高级使用
动态列可以将一个函数指定给dataset对象
函数的参数row传入的是每一行记录,所以可以根据传入的记录进行更一步的计算:
tag可以给记录添加tag,之后通过tag来过滤记录:
3.举个小例子现在有一个场景,我们需要将一份股票数据csv文件转化为json数据:
你只需要这样操作:
即可将其转化为json格式,显然,它的特点在于轻量、简单。如果用pandas来做这样的转化,则有些大材小用。

微软开发市场后Opera浏览器下载量增长三倍
分析变频调速控制系统制动中的相关问题
各省工业机器人产量排名 上海:中国工业机器人一哥
进口数据不佳,中国半导体市场面临挑战与机遇
Maxim推出具有自动功率控制和消光比控制(ERC)的激光驱动器/限幅放大器组合芯片MAX3711
Tablib:一个Python的第三方数据导出模块
从域控制器到中央计算,全场景车芯优势凸显
数明半导体推高速双通道/四通道数字隔离器 SiLM572x/SiLM574x系列
TI推出业界首款零漂移、毫微功率放大器,兼具超低功耗和超高精度
高通重金砸90亿招聘三位前苹果大牛
索尼新机Xperia曝光:不跟大流,做一捧清流
如何巧妙使用数字对讲机,它的这些高级技巧你知道吗
华为联合运营商举办Cloud X全国巡演共建5G时代美好新世界
Steam显示 虚拟现实头显的实际数量增幅大于近期的报道
荣耀8又降价了,荣耀8降价520元,实为停产清库存?
美团于今日港交所正式挂牌交易,估值定价至少为483亿美元
级联码,什么是级联码
GAIA电源电磁干扰(EMI)滤波器
如何看待元宇宙
中国联通利用共建共享可信频谱共享技术完成了业内首个现网示范应用