tablib可以简洁优雅地将数据导出为excel、json、csv、yaml等格式。
以前经常需要将数据导出保存到excel、json、csv、yaml等,需要安装xlwt、pyyaml等第三方模块。需要根据不同模块提供的方法,自己编写代码来实现。当然自己定制需求不高的情况下,可以了解一下tablib这个模块。
相较于重量级的pandas,tablib则轻巧很多,不需要安装那么多依赖包。
pip install tablib
talib.dataset
import tablib
#表头
headers = ('id', 'name', 'age', 'grade')
#数据
data = [
['1', 'wanwei', '12', '001'],
['2', 'wanwei1', '12', '001'],
['3', 'wanwei1', '12', '001'],
['4', 'wanwei1', '12', '001']
]
#创建数据集
dataset_o = tablib.Dataset(*data, headers=headers)
print(dataset_o)
输出结果为:
id|name |age|grade
--|-------|---|-----
1 |wanwei |12 |001
2 |wanwei1|12 |001
3 |wanwei1|12 |001
4 |wanwei1|12 |001
tablib.dataset.load
json
with open('test.json', encoding='utf-8') as f:
import_json = tablib.Dataset().load(in_stream=f)
print(import_json)
print(import_json.json)
输出结果为:
id,name,age,grade
1,wanwei,12,001
2,wanwei1,12,001
3,wanwei1,12,001
4,wanwei1,12,001
id|name |age|grade
--|-------|---|-----
1 |wanwei |12 |001
2 |wanwei1|12 |001
3 |wanwei1|12 |001
4 |wanwei1|12 |001
[{"id": "1", "name": "wanwei", "age": "12", "grade": "001"}, {"id": "2", "name": "wanwei1", "age": "12", "grade": "001"}, {"id": "3", "name": "wanwei1", "age": "12", "grade": "001"}, {"id": "4", "name": "wanwei1", "age": "12", "grade": "001"}]
excel
with open('test.xlsx', encoding='utf-8') as f:
import_xlsx = tablib.Dataset().load(in_stream=f)
print(import_xlsx )
print(import_xlsx.xlsx)
从上可以看出,tablib可以自动检测文件类型,并使用适当的格式化方法来实现导入,方便快捷,无需针对不同格式文件开发不同代码。
支持将数据集转换为一下任意一种数据格式
with open('test.json', encoding='utf-8') as f:
import_json = tablib.Dataset().load(in_stream=f)
print(import_json)
#json
print(import_json.json)
#csv
print(import_json.csv)
#yaml
print(import_json.yaml)
#excel
print(import_json.excel)
导出单页excel数据
import tablib
#表头
headers = ('id', 'name', 'age', 'grade')
#数据
data = [
['1', 'wanwei', '12', '001'],
['2', 'wanwei1', '12', '001'],
['3', 'wanwei1', '12', '001'],
['4', 'wanwei1', '12', '001']
]
#创建数据集
dataset_o = tablib.Dataset(*data, headers=headers)
#设置标签
dataset_o.title='dataset_o'
with open('test.xlsx', 'wb') as f:
f.write(dataset_o.export('xlsx'))
导出多页excel数据
import tablib
#表头
headers = ('id', 'name', 'age', 'grade')
#数据
data_o = [
['1', 'wanwei', '12', '001'],
['2', 'wanwei1', '12', '001']
]
data_t = [
['3', 'wanwei1', '12', '001'],
['4', 'wanwei1', '12', '001']
]
#创建数据集
dataset_o = tablib.Dataset(*data_o, headers=headers)
dataset_t = tablib.Dataset(*data_t, headers=headers)
#设置标签
dataset_o.title='dataset_o'
dataset_t.title='dataset_t'
databook = tablib.Databook((dataset_t, dataset_o))
with open('test.xlsx', 'wb') as f:
f.write(databook.export('xlsx'))