git 应用

tablib库实现数据导出为json/csv/excel等常见格

2020-02-26  本文已影响0人  Stone0823

Python 的 tablib 库在数据格式转换的时候非常方便,比如,我们有一个 json 文件,想转换为 csv 或者 Excel 文件格式。本篇介绍 tablib 库在格式转换中的应用。

tablib 专门设计用于处理表格式数据( tabular dataset)的输入、处理和输出。python 数据处理因为有 pandas 库,一般并不需要 tablib 来做数据处理,但 tablib 库用于输出非常方便,所以在进行数据格式转换的时候,可以用这个库来实现。

项目源代码:https://github.com/jazzband/tablib
项目文档:https://tablib.readthedocs.io/en/stable/

安装

pip install tablib

创建 Dataset 对象

tablib 核心的对象是 Dataset (数据集),我们来看看如何构建 Dataset,示例非常直观:

import tablib

dst = tablib.Dataset(headers=['First Name', 'Last Name', 'Age'])
data = [
    ('Bruce', 'Lee', 18),
    ('Alice', 'Brown', 20),
    ('Alex', 'Gren', 19)
]

for item in data:
    dst.append(item)

print(dst)

程序的输出结果:

First Name|Last Name|Age
----------|---------|---
Bruce     |Lee      |18
Alice     |Brown    |20
Alex      |Gren     |19

以上示例演示了通过 append() 方法动态添加行,如果是直接创建 Dataset,代码可以这样写:

import tablib

headers=['First Name', 'Last Name', 'Age']
data = [
    ('Bruce', 'Lee', 18),
    ('Alice', 'Brown', 20),
    ('Alex', 'Gren', 19)
]
dst = tablib.Dataset(*data, headers=headers)

print(dst)

tablib 输出格式

tablib 支持 10 种格式的转换输出,不包含 XML。按 github 说明文件的解释,后续也不会包含 XML 格式。tablib 能够输出的格式包括:

假设我们想把刚才创建的 Dataset 输出为 json 格式,只需要将最后的 print() 语句改为:

print(dst.json)

程序运行的结果显示:

[{"First Name": "Bruce", "Last Name": "Lee", "Age": 18}, 
{"First Name": "Alice", "Last Name": "Brown", "Age": 20}, 
{"First Name": "Alex", "Last Name": "Gren", "Age": 19}]

tablib 负责处理数据格式的转换,如果需要将输出结果输出为文件,还需要搭配 Python 标准库的 open() 函数:

with open('output.json', mode='w',encoding='utf8') as outfile:
    outfile.write(dst.json)

以下代码将数据输出为 Excel 文件:

with open('output.xlsx', mode='wb') as outfile:
    outfile.write(dst.xlsx)

最后给出一个稍微综合一点的示例,将 Northwind odata service 的 json 数据导入到 Excel文件。

url: https://services.odata.org/V2/Northwind/Northwind.svc/Customers?$format=json

这是一个在线的 odata 服务,我们可以在浏览器中查看。获取 json 格式的数据格式如下:


十几行代码就达到目的:

import requests as req
import tablib

url = 'https://services.odata.org/V2/Northwind/Northwind.svc/Customers?$format=json'
data = req.get(url).json()['d']['results'] 

ds = tablib.Dataset()
ds.dict = data

# 删除无关列
del ds['__metadata']
del ds['Orders']
del ds['CustomerDemographics']

with open('customers.xlsx', 'wb') as outfile:
    outfile.write(ds.xlsx)

pandas 库也能很方便的实现主要数据格式的转换,大家可以根据需要和习惯来选择。

上一篇下一篇

猜你喜欢

热点阅读