tablib

简介

对于经常要处理表格数据的开发者而言,Tablib一定会是你的福音。
Tablib是a format-agnostic tabular dataset library,由于翻译很拗口,简单来说,Tablib可以在内存中处理表格数据,然后导出成各式各样的文件格式。
支持导出的文件格式包括:

  • Excel (Sets + Books)
  • JSON (Sets + Books)
  • YAML (Sets + Books)
  • Pandas DataFrames (Sets)
  • HTML (Sets)
  • TSV (Sets)【Tab-separated values
  • ODS (Sets)【ODS is a spreadsheet file format used by OpenOffice/StarOffice】
  • CSV (Sets)
  • DBF (Sets)【.dbf后缀的文件是dBase database file】

安装

pip install tablib[pandas]

示例

Tablie有两种数据类型: tablib.Dataset()tablib.Databook()
Dataset可以理解为table表,表头可以省略。
Databook可以理解为一系列的Dataset,类比为一个Excel文件可以包含多个Sheets。

代码示例

headers = ('first_name', 'last_name')

data = [
('John', 'Adams'),
('George', 'Washington')
]

data = tablib.Dataset(*data, headers=headers)
data.append(('Henry', 'Ford')) # add row
data.append_col((90, 67, 83), header='age') # add column

print(data[:2])
# output: [('John', 'Adams', 90), ('George', 'Washington', 67)]

print(data['first_name'])
# output: ['John', 'George', 'Henry']

del data[1] # delete rows

导出JSON

>>> print(data.export('json'))
[
{
"last_name": "Adams",
"age": 90,
"first_name": "John"
},
{
"last_name": "Ford",
"age": 83,
"first_name": "Henry"
}
]

导出YAML

>>> print(data.export('yaml'))
- {age: 90, first_name: John, last_name: Adams}
- {age: 83, first_name: Henry, last_name: Ford}

导出CSV

>>> print(data.export('csv'))
first_name,last_name,age
John,Adams,90
Henry,Ford,83

导出Excel

支持XLS和XLSX格式。

>>> with open('people.xls', 'wb') as f:
... f.write(data.export('xls'))
>>> with open('people.xlsx', 'wb') as f:
... f.write(data.export('xlsx'))

如果导出xlsx格式时发生诸如TypeError: cell() missing 1 required positional argument: 'column'的错误,可参考issue#324stackoverflow上的回答

导出DBF

>>> with open('people.dbf', 'wb') as f:
... f.write(data.export('dbf'))

导出Pandas DataFrames

>>> print(data.export('df'))
first_name last_name age
0 John Adams 90
1 Henry Ford 83

导出ODS

>>> with open('people.ods', 'wb') as f:
... f.write(data.export('ods'))

More

文档与更多示例参考:

作者: WOLFHONG
发布日期: 2018-02-06