美文网首页git 应用
tablib库实现数据导出为json/csv/excel等常见格

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

作者: Stone0823 | 来源:发表于2020-02-26 13:27 被阅读0次

    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 能够输出的格式包括:

    • Excel (Sets + Books)
    • JSON (Sets + Books)
    • YAML (Sets + Books)
    • Pandas DataFrames (Sets)
    • HTML (Sets)
    • Jira (Sets)
    • TSV (Sets)
    • ODS (Sets)
    • CSV (Sets)
    • DBF (Sets)

    假设我们想把刚才创建的 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 库也能很方便的实现主要数据格式的转换,大家可以根据需要和习惯来选择。

    相关文章

      网友评论

        本文标题:tablib库实现数据导出为json/csv/excel等常见格

        本文链接:https://www.haomeiwen.com/subject/rinmchtx.html