一文搞定 Python 表格数据处理:Tablib 多格式转换实战解析
【免费下载链接】tablibPython Module for Tabular Datasets in XLS, CSV, JSON, YAML, &c.项目地址: https://gitcode.com/gh_mirrors/ta/tablib
说到表格数据处理,很多人第一反应是 pandas,但如果目标只是"把 Excel 换成 JSON""把 CSV 拼成多工作表文件",Tablib 可能是更轻、更趁手的答案。Tablib 是一个格式无关的 Python 表格数据集处理库,它的核心能力,就是让同一份二维数据在 CSV、XLSX、JSON、YAML、HTML、LaTeX 之间自由往返,而 API 简单到令人发指——绝大多数转换,一两行代码就收工了。
三步完成环境搭建:一条 pip 命令接入全部格式
Tablib 的格式支持采用"按需注册"的机制(逻辑集中在src/tablib/formats/__init__.py的注册表里):CSV、JSON、TSV 这类零依赖格式开箱即用,XLSX、YAML、ODS、pandas、DBF 等则依赖对应的第三方包。想一次性配齐所有格式,直接装全家桶:
pip install tablib[all]装完随便打开一个 Python 会话,你就能完成人生第一次"格式切换":
import tablib data = tablib.Dataset() data.headers = ['name', 'age'] data.append(['张三', 25]) data.append(['李四', 30]) print(data.csv) # 秒出 CSV 文本 print(data.json) # 秒出 JSON 文本data.csv、data.json这种属性式写法,是 Tablib 最讨喜的设计:每种格式被注册成 Dataset 上的读写属性,导出就像在读取数据本身,完全不用记方法名。
十分钟上手 Dataset:把一张表装进内存随便折腾
Dataset 是 Tablib 的核心类,可以理解成一块"住在内存里的 Excel 工作表"。除了 append,它还提供了一整套行列操作:
data = tablib.Dataset() data.headers = ['name', 'age'] data.append(['张三', 25]) data.append(['李四', 30]) # 批量追加、从头部插入 data.extend([['王五', 28], ['赵六', 35]]) data.insert(0, ['小李', 22]) # 按表头取整列、追加新列 print(data['name']) # ['小李', '张三', '李四', '王五', '赵六'] data.append_col([23, 26, 31, 29, 36], header='score') # 查看规模 print(data.height, data.width) # 5 3还有一个很实用的接口:data.dict会把整张表打包成字典列表,方便和业务代码对接;反过来给data.dict赋值,也能把字典列表还原成 Dataset。读写口径一致,几乎不用额外的心智负担。
多工作表怎么办?交给 Databook 一把梭
单张表用 Dataset,多张表就轮到 Databook 登场。它本质上是 Dataset 的容器,恰好对应 Excel 里"一个文件多个 Sheet"的结构:
book = tablib.Databook() book.add_sheet(sales) # 销售明细 book.add_sheet(summary) # 汇总表 print(book.size) # 2 with open('report.xlsx', 'wb') as f: f.write(book.export('xlsx'))反向读取多工作表文件同样简单:
book = tablib.import_book(open('report.xlsx', 'rb'), 'xlsx') for sheet in book.sheets(): print(sheet.title, sheet.height)四个进阶技巧:让代码更省事的隐藏招式
给行打标签,再一键筛选。append 时可以为行附加标签,之后用filter()筛出目标子集,比如只保留"有效客户"或"经理级":
data.append(['孙八', 40], tags=['manager', 'senior']) managers = data.filter('manager')给列挂格式化器。导出前统一美化单元格,特别适合金额、日期这类展示逻辑:
data.add_formatter('age', lambda v: f'{v}岁')动态列自动计算。传一个可调用对象进去,Tablib 会自动对每一行求值,新列的值随时保持最新:
data.append_col(col=compute_bonus, header='bonus')数据整理全家桶。sort()按列排序、stack()纵向拼接、stack_cols()横向拼接、transpose()行列转置、subset()行列切片、remove_duplicates()去重、append_separator()插入分隔行。导出到 Excel 时还会自动加粗表头、冻结首行,甚至按内容自适应列宽。日常报表需要的数据整形,基本全覆盖了。
实战串讲:从 CSV 到带汇总的多工作表 Excel
把上面的能力串起来,模拟一个真实需求:上游丢来一份 CSV 客户表,你要生成一份带"汇总 Sheet"的 Excel 发给业务方。
import tablib raw = tablib.import_set(open('customers.csv', 'rb'), 'csv') # 只留有效客户,按年龄排序 valid = raw.filter('valid').sort('age') # 追加一个折扣计算列 valid.append_col(col=lambda r: r[1] * 0.9, header='discount') summary = tablib.Dataset() summary.headers = ['item', 'value'] summary.append(['总客户数', valid.height]) book = tablib.Databook([valid, summary]) with open('客户报表.xlsx', 'wb') as f: f.write(book.export('xlsx'))全程没有手写任何解析与序列化代码,数据的所有"变形"都由 Dataset 和 Databook 两个对象承接,可读性非常在线。
想进一步深挖每个格式的导出参数(比如 Excel 的冻结窗格、公式转义开关),可以翻看仓库里的docs/formats.rst,核心实现集中在src/tablib/core.py。下次再遇到格式转换的活儿,先试试 Tablib,说不定两行代码就收工了。🚀
【免费下载链接】tablibPython Module for Tabular Datasets in XLS, CSV, JSON, YAML, &c.项目地址: https://gitcode.com/gh_mirrors/ta/tablib
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考