ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

3分钟跑通Tablib:一次学会Excel、CSV、JSON表格数据的无损互转

3分钟跑通Tablib:一次学会Excel、CSV、JSON表格数据的无损互转 3分钟跑通Tablib一次学会Excel、CSV、JSON表格数据的无损互转【免费下载链接】tablibPython Module for Tabular Datasets in XLS, CSV, JSON, YAML, c.项目地址: https://gitcode.com/gh_mirrors/ta/tablib凌晨三点你盯着手上十几份格式各异的报表——Excel里混着带公式的单元格、CSV文件缺列少行、JSON嵌套得歪七扭八而老板只丢下一句整理成统一格式发我。Tablib这个Python表格数据转换库就是为这种时刻准备的它用一套代码通吃XLS、CSV、JSON、YAML、HTML、LaTeX等十余种格式的导入导出与处理。三分钟快速上手装好就能跑的最小路径Tablib的安装省心到令人感动一行命令带出全部格式支持pip install tablib[all]只想用基础功能的话裸装pip install tablib也能跑CSV、JSON、TSV这些格式开箱即用其余格式按需补齐。装完立刻写个从CSV读入、转成JSON输出的完整小例子体验一把全流程import tablib # 第一步建一个空的数据集并告诉它有哪些列 data tablib.Dataset(headers[姓名, 城市, 得分]) # 第二步塞几行数据 data.append((小林, 上海, 92)) data.append((阿光, 北京, 85)) data.append((小满, 广州, 88)) # 第三步一行代码导出成 JSON print(data.export(json))运行后会得到标准的JSON数组[{姓名: 小林, 城市: 上海, 得分: 92}, ...]注意看表头自动变成了JSON的键。这就是Tablib的魔法所在不管数据最终去向哪种格式你只需要维护一份数据本体导出工作全交给它。核心能力实战拆解三个让效率翻倍的硬功夫第一招格式互转读文件不再看脸真实业务里最折磨人的是客户给Excel、数据库要CSV、前端要JSON。Tablib的load()和export()就是为此而生的双向通道。下面这段代码把一个带格式的xlsx文件读进来再一口气吐出三种目标格式import tablib # 读入Excel文件注意二进制模式打开 with open(报表.xlsx, rb) as f: data tablib.Dataset().load(f, xlsx) # 导出CSV字符串 csv_text data.export(csv) # 导出YAML yaml_text data.export(yaml) # 导出HTML表格可直接嵌入网页 html_table data.export(html) with open(报表.csv, w, encodingutf-8) as f: f.write(csv_text)预期效果报表.csv内容规整、列对齐报表.yaml是清晰的可读键值结构报表.html是一段含thead和tbody的完整表格标签。全程不用碰任何格式解析库。更省心的是load()还支持自动识别格式——只要传入的数据流是它能认出的格式format参数可以直接省略。当然遇到模棱两可的文件时手动指定更稳妥。第二招动态列与格式化器让计算列自动生长很多表格需要在运行时追加派生数据比如根据成绩算评级。Tablib允许你挂一个函数当列每次有新行加入都会自动计算def calc_level(row): 根据得分列自动评级row是当前行的数据 score row[2] if score 90: return 优秀 elif score 80: return 良好 return 加油 data.append_col(calc_level, header评级) print(data.export(json))预期效果JSON里多出评级: 优秀这样的字段且计算函数每行都会重新调用。新追加的行如果只提供前三列评级列也会自动补算——这就是动态列的设计初衷。如果你只是想在导出时临时美化某些字段而不是改原始数据用add_formatter更合适。比如给所有数字加上千分位def add_thousands(value): if isinstance(value, (int, float)): return f{value:,} return value data.add_formatter(得分, add_thousands) print(data.export(csv))预期效果CSV里得分列变成92或1,234这种带逗号的格式而Dataset内部存储的数字原封不动——格式化只发生在导出瞬间。第三招Databook多工作表一份Excel装下所有数据多个数据集要放进同一个Excel文件的不同Sheet把每个数据集当一页纸塞进Databook这个活页夹就行book tablib.Databook() sales tablib.Dataset(headers[月份, 销售额]) sales.title 销售汇总 sales.append((1月, 12000)) sales.append((2月, 15800)) inventory tablib.Dataset(headers[商品, 库存]) inventory.title 库存明细 inventory.append((显示器, 23)) inventory.append((键盘, 140)) book.add_sheet(sales) book.add_sheet(inventory) with open(经营数据.xlsx, wb) as f: f.write(book.export(xlsx))预期效果生成的经营数据.xlsx里有两个Sheet名字分别是销售汇总和库存明细。每个数据集加一句data.title xxx导出时Sheet名就跟着走了连重命名的功夫都省了。反过来读多Sheet的Excel文件时用Databook().load(f, xlsx)每个Sheet自动变成书里的一个数据集。进阶技巧与隐藏玩法五个少有人知的冷门绝活1. 用标签给行做记号随时过滤出想要的分组不想把是否vip这类标志写进表格给行打标签按需筛选data tablib.Dataset(headers[姓名, 城市]) data.append((小林, 上海), tags[vip]) data.append((阿光, 北京), tags[普通]) vip_only data.filter([vip]) print(vip_only.export(csv))标签属于元数据导出时自动消失连续调用filter()还能实现与关系的多重过滤。2. 一行代码生成SQL插入语句直连数据库迁移把Dataset直接转成可执行的SQLdata.title students print(data.export(sql))输出类似INSERT INTO students (姓名, 城市, 得分) VALUES (小林, 上海, 92);日期时间还会自动渲染成DATE 2025-01-01这种ANSI标准字面量省去手写转义。3. 转置表格行列互换的骚操作需要把横表变竖表展示时transpose()一次搞定pivot data.transpose() print(pivot)有表头时第一列会变成新表头没表头时行变列、列变行行为符合直觉。4. 去重、拼接、子集数据清洗三板斧data.remove_duplicates() # 原地去重保持原顺序 merged data.stack(other) # 上下拼接行扩展 wide data.stack_cols(other) # 左右拼接列扩展 part data.subset(rows[0, 2], cols[姓名, 得分]) # 抽取子集stack要求两边列数一致stack_cols要求两边行数一致报错前先自查维度。5. 控制台表格输出调试数据的照妖镜print(data.export(cli))装好tabulate后能在终端直接看到对齐工整的ASCII表格排查数据问题时比print(data)直观得多。避坑指南新手最容易踩的五个坑二进制文件要用wb模式写导出xls/xlsx是二进制流写文件忘了wb会直接报TypeError这是最高频翻车点。导出CSV乱码多半是编码问题写入时补上encodingutf-8-sigExcel打开带中文的CSV才不会花屏。可选格式要装对依赖data.export(xlsx)报UnsupportedFormat那是没装openpyxl按提示pip install tablib[xlsx]即可xls需要xlrdxlwt。没有表头就导出JSON会少键JSON/YAML/df这类格式依赖headers做键名数据源没表头时导入要显式传headersFalse之后自己data.headers [...]补上。列数不一致会抛InvalidDimensionsappend的行必须和当前宽度匹配动态列除外想临时查错可以用data._validate(safetyTrue)只检查不抛异常。总结用一句话点亮你的下一个任务Tablib最迷人的地方是把格式转换这件脏活累活压缩成了两句API。回顾它的核心价值一套数据多种输出Excel、CSV、JSON、YAML、HTML、SQL等十余种格式自由切换读写双向自动识别load()认格式export()出结果无需关心底层解析库处理能力完备动态列、标签过滤、转置、拼接、去重、格式化器一应俱全上手零负担pip一条命令五分钟写出第一个转换脚本现在去找一份手头最乱的表格文件跑一遍Dataset().load()到export()让数据按你想要的样子流动起来吧。【免费下载链接】tablibPython Module for Tabular Datasets in XLS, CSV, JSON, YAML, c.项目地址: https://gitcode.com/gh_mirrors/ta/tablib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表