Tablib - Python
最后修改日期:2024 年 9 月 24 日
在本文中,我们将介绍如何在 Python 中使用 TOML 配置文件格式。我们使用的是 tomllib
模块,该模块在 Python 3.11 中引入。
tablib 库旨在使处理表格数据(如 CSV、XLSX、JSON 等)更加高效和灵活。它提供了一个统一的接口来处理这些不同的数据格式。
它使我们能够轻松地:
- 创建和操作表格数据:使用 Python 列表或字典定义和修改数据结构。
- 格式转换:在 CSV、XLSX、JSON 和其他支持的格式之间无缝转换数据。
- 导出和导入数据:将数据保存到文件或从现有文件加载数据。
- 自定义输出:控制导出数据的外观,例如列标题、格式等。
定义数据集
tablib Dataset 是一个 Python 对象,代表一组表格数据。它提供了一种以统一格式存储和操作数据的结构化方式。
import tablib ds = tablib.Dataset() ds.headers = ['first_name', 'last_name', 'occupation'] ds.append(['John', 'Doe', 'gardener' ]) ds.append(['Adam', 'Brown', 'programmer' ]) ds.append(['Tom', 'Holland', 'teacher' ]) ds.append(['Ken', 'Roberts', 'driver' ]) print(ds) ds.wipe() print(ds)
示例创建一个简单的数据集。
ds = tablib.Dataset()
我们创建一个空数据集。
ds.headers = ['first_name', 'last_name', 'occupation']
我们为数据集创建了四个标题。
ds.append(['John', 'Doe', 'gardener' ]) ds.append(['Adam', 'Brown', 'programmer' ]) ds.append(['Tom', 'Holland', 'teacher' ]) ds.append(['Ken', 'Roberts', 'driver' ])
使用 append
方法,我们将四行添加到数据集中。
print(ds)
我们打印数据集的内容。
ds.wipe()
wipe
方法会从数据集中移除数据。
$ ./main.py first_name|last_name|occupation ----------|---------|---------- John |Doe |gardener Adam |Brown |programmer Tom |Holland |teacher Ken |Roberts |driver
获取行
我们可以通过索引操作或 get
方法检索行。
import tablib ds = tablib.Dataset() ds.headers = ['first_name', 'last_name', 'occupation'] ds.append(['John', 'Doe', 'gardener' ]) ds.append(['Adam', 'Brown', 'programmer' ]) ds.append(['Tom', 'Holland', 'teacher' ]) ds.append(['Ken', 'Roberts', 'driver' ]) print(ds[0]) print(ds[-1]) print(ds.get(1)) print(ds.get(-2))
示例构建了一个数据集并检索了四行。
$ ./main.py ('John', 'Doe', 'gardener') ('Ken', 'Roberts', 'driver') ('Adam', 'Brown', 'programmer') ('Tom', 'Holland', 'teacher')
获取列
get_col
方法从 Dataset
中返回指定索引的列。
import tablib ds = tablib.Dataset() ds.headers = ['first_name', 'last_name', 'occupation'] ds.append(['John', 'Doe', 'gardener' ]) ds.append(['Adam', 'Brown', 'programmer' ]) ds.append(['Tom', 'Holland', 'teacher' ]) ds.append(['Ken', 'Roberts', 'driver' ]) print(ds.get_col(0)) print(ds.get_col(2))
在示例中,我们打印了第一列和最后一列。
$ ./main.py ['John', 'Adam', 'Tom', 'Ken'] ['gardener', 'programmer', 'teacher', 'driver']
添加新列
append_col
会向数据集中添加一列。
import tablib ds = tablib.Dataset() ds.headers = ['first_name', 'last_name', 'occupation'] ds.append(['John', 'Doe', 'gardener' ]) ds.append(['Adam', 'Brown', 'programmer' ]) ds.append(['Tom', 'Holland', 'teacher' ]) ds.append(['Ken', 'Roberts', 'driver' ]) ds.append_col([980, 1230, 2310, 1100], header='salary') print(ds)
在示例中,我们将新列 salary
添加到数据集中。
$ main.py first_name|last_name|occupation|salary ----------|---------|----------|------ John |Doe |gardener |980 Adam |Brown |programmer|1230 Tom |Holland |teacher |2310 Ken |Roberts |driver |1100
数据排序
sort
函数用于对数据集中的数据进行排序。该函数返回一个新的已排序数据集;原始数据集不会被修改。
import tablib ds = tablib.Dataset() ds.headers = ['first_name', 'last_name', 'occupation'] ds.append(['John', 'Doe', 'gardener' ]) ds.append(['Adam', 'Brown', 'programmer' ]) ds.append(['Tom', 'Holland', 'teacher' ]) ds.append(['Ken', 'Roberts', 'driver' ]) ds.append_col([980, 1230, 2310, 1100], header='salary') sorted_ds = ds.sort('last_name') print(sorted_ds) print() sorted_ds = ds.sort(3, reverse=True) print(sorted_ds)
示例按姓氏和薪水对数据进行排序。
sorted_ds = ds.sort('last_name') print(sorted_ds)
我们按 last_name
列对数据进行排序。该函数返回一个新的已排序数据集。
sorted_ds = ds.sort(3, reverse=True) print(sorted_ds)
我们按薪水降序对数据进行排序。这次我们提供了列索引。
$ ./main.py first_name|last_name|occupation|salary ----------|---------|----------|------ Adam |Brown |programmer|1230 John |Doe |gardener |980 Tom |Holland |teacher |2310 Ken |Roberts |driver |1100 first_name|last_name|occupation|salary ----------|---------|----------|------ Tom |Holland |teacher |2310 Adam |Brown |programmer|1230 Ken |Roberts |driver |1100 John |Doe |gardener |980
格式化列
使用 add_formatter
,我们可以格式化列。
import tablib import datetime ds = tablib.Dataset() ds.headers = ['Name', 'Age', 'Height', 'Birthdate'] ds.append(['John Doe', 34, 174.5, datetime.date(1990, 1, 1)]) ds.append(['Roger Roe', 25, 182.7, datetime.date(1995, 5, 15)]) ds.add_formatter('Height', lambda v: f'${v:.2f}') ds.add_formatter('Birthdate', lambda v: v.strftime('%Y-%m-%d')) print(ds)
示例格式化了 Height 和 Birthdate 列。
导出数据集
export
方法会将数据集导出为指定格式。支持的格式包括 CSV、YAML、XLSX、JSON 和 Pandas dataframe。
import tablib ds = tablib.Dataset() ds.headers = ['first_name', 'last_name', 'occupation'] ds.append(['John', 'Doe', 'gardener' ]) ds.append(['Adam', 'Brown', 'programmer' ]) ds.append(['Tom', 'Holland', 'teacher' ]) ds.append(['Ken', 'Roberts', 'driver' ]) ds.append_col([980, 1230, 2310, 1100], header='salary') fname = 'users.csv' with open(fname, 'w', newline='') as f: f.write(ds.export('csv')) fname = 'users.xlsx' with open(fname, 'wb') as f: f.write(ds.export('xlsx'))
我们将数据集导出为 CSV 和 XLSX 格式。
with open(fname, 'w', newline='') as f: f.write(ds.export('csv'))
为了避免出现额外的空行,我们将 CSV 格式的 newline
选项设置为空字符。
with open(fname, 'wb') as f: f.write(ds.export('xlsx'))
对于 XLSX 格式,我们以 'wb' 模式打开文件。
load 函数
load
函数将数据加载到数据集中。
import tablib ds = tablib.Dataset() fname = 'users.csv' with open(fname, 'r') as f: ds.load(f) print(ds)
我们从 users.csv
文件中将行加载到数据集中。
$ ./main.py first_name|last_name|occupation|salary ----------|---------|----------|------ John |Doe |gardener |980 Adam |Brown |programmer|1230 Tom |Holland |teacher |2310 Ken |Roberts |driver |1100
来源
在本文中,我们利用 tablib 库在 Python 中处理了表格数据。
作者
列出所有 Python 教程。