快速启动¶
急于开始?本页介绍了如何开始使用tablib。这假设您已经安装了tablib。如果你不去,就去 Installation 部分。
首先,确保:
塔比利群岛 installed
塔比利群岛 up-to-date
让我们从一些简单的用例和示例开始。
创建数据集¶
A Dataset
只不过是它的名字所暗示的一组数据。
创建自己的 tablib.Dataset
对象很简单。::
data = tablib.Dataset()
你现在可以开始填充这个了 Dataset
对象和数据。
示例上下文
从现在开始,如果你看到 data
,假设它是新的 Dataset
对象。
添加行¶
假设你想收集一个简单的名字列表。::
# collection of names
names = ['Kenneth Reitz', 'Bessie Monke']
for name in names:
# split name appropriately
fname, lname = name.split()
# add names to Dataset
data.append([fname, lname])
您可以随时获得数据集的一个漂亮的、Pythic视图。 Dataset.dict
::
>>> data.dict
[('Kenneth', 'Reitz'), ('Bessie', 'Monke')]
添加标题¶
是时候加强我们的 Dataset
给我们的专栏一些标题。这样做,设置 Dataset.headers
. ::
data.headers = ['First Name', 'Last Name']
现在我们的数据看起来有点不同了。::
>>> data.dict
[{'Last Name': 'Reitz', 'First Name': 'Kenneth'},
{'Last Name': 'Monke', 'First Name': 'Bessie'}]
添加列¶
现在我们有了一个基本的 Dataset
就地添加一列 ages 对它。::
data.append_col([22, 20], header='Age')
现在让我们看看数据。::
>>> data.dict
[{'Last Name': 'Reitz', 'First Name': 'Kenneth', 'Age': 22},
{'Last Name': 'Monke', 'First Name': 'Bessie', 'Age': 20}]
就这么简单。
导入数据¶
创建一个 tablib.Dataset
对象通过导入预先存在的文件很简单。::
with open('data.csv', 'r') as fh:
imported_data = Dataset().load(fh)
这将检测传入的数据类型,并使用适当的格式化程序进行导入。因此,您可以从各种不同的文件类型中导入。
没有标题的源
当格式为 csv
, tsv
, dbf
, xls
或 xlsx
,并且数据源没有标头,则应按如下方式导入:
- 打开('数据.csv','r')作为fh:
导入的_data=Dataset().load(fh,headers=False)
导出数据¶
Tablib的杀手级功能是 Dataset
对象转换为多种格式。
Comma-Separated Values ::
>>> data.export('csv')
Last Name,First Name,Age
Reitz,Kenneth,22
Monke,Bessie,20
对象表示法 ::
>>> data.export('json')
[{"Last Name": "Reitz", "First Name": "Kenneth", "Age": 22}, {"Last Name": "Monke", "First Name": "Bessie", "Age": 20}]
yaml不是标记语言 ::
>>> data.export('yaml')
- {Age: 22, First Name: Kenneth, Last Name: Reitz}
- {Age: 20, First Name: Bessie, Last Name: Monke}
Microsoft Excel ::
>>> data.export('xls')
<redacted binary data>
Pandas数据帧 ::
>>> data.export('df')
First Name Last Name Age
0 Kenneth Reitz 22
1 Bessie Monke 21
选择行和列¶
可以像标准的Python列表一样切片和骰子数据。::
>>> data[0]
('Kenneth', 'Reitz', 22)
>>> data[0:2]
[('Kenneth', 'Reitz', 22), ('Bessie', 'Monke', 20)]
您还可以使用行的索引来访问行,而无需切片。**
>>> data.get(0)
('Kenneth', 'Reitz', 22)
如果我们有一组由数千行组成的数据,那么在列中获取值列表可能会很有用。为此,我们访问 Dataset
好像它是一个标准的python字典。::
>>> data['First Name']
['Kenneth', 'Bessie']
还可以使用其索引访问列。::
>>> data.headers
['Last Name', 'First Name', 'Age']
>>> data.get_col(1)
['Kenneth', 'Bessie']
让我们找出平均年龄。::
>>> ages = data['Age']
>>> float(sum(ages)) / len(ages)
21.0
删除行和列¶
这比你想象的要容易。删除列:
>>> del data['Col Name']
删除行范围:
>>> del data[0:12]
高级用法¶
文档服务的这一部分为您提供了一个很难从 API Documentation .
现在是完全不同的事情。
动态列¶
在 0.8.3 版本加入.
多亏了josh ourisman,tablib现在支持添加动态列。动态列是单个可调用对象( e.g. 函数)。
让我们在 Dataset
对象。在这个例子中,我们有一个函数,它为我们的学生生成一个随机的分数。::
import random
def random_grade(row):
"""Returns a random integer for entry."""
return (random.randint(60,100)/100.0)
data.append_col(random_grade, header='Grade')
让我们看看我们的数据。::
>>> data.export('yaml')
- {Age: 22, First Name: Kenneth, Grade: 0.6, Last Name: Reitz}
- {Age: 20, First Name: Bessie, Grade: 0.75, Last Name: Monke}
我们把那根柱子去掉。::
>>> del data['Grade']
添加动态列时,传递给给定可调用项的第一个参数是当前数据行。可以使用此方法对数据行执行计算。
例如,我们可以使用行中可用的数据来猜测学生的性别。::
def guess_gender(row):
"""Calculates gender of given student data row."""
m_names = ('Kenneth', 'Mike', 'Yuri')
f_names = ('Bessie', 'Samantha', 'Heather')
name = row[0]
if name in m_names:
return 'Male'
elif name in f_names:
return 'Female'
else:
return 'Unknown'
将此函数作为动态列添加到数据集中将导致:::
>>> data.export('yaml')
- {Age: 22, First Name: Kenneth, Gender: Male, Last Name: Reitz}
- {Age: 20, First Name: Bessie, Gender: Female, Last Name: Monke}
分离器¶
在 0.8.2 版本加入.
在构建电子表格时,通常需要创建一个包含即将到来的数据信息的空行。所以,
daniel_tests = [
('11/24/09', 'Math 101 Mid-term Exam', 56.),
('05/24/10', 'Math 101 Final Exam', 62.)
]
suzie_tests = [
('11/24/09', 'Math 101 Mid-term Exam', 56.),
('05/24/10', 'Math 101 Final Exam', 62.)
]
# Create new dataset
tests = tablib.Dataset()
tests.headers = ['Date', 'Test Name', 'Grade']
# Daniel's Tests
tests.append_separator('Daniel\'s Scores')
for test_row in daniel_tests:
tests.append(test_row)
# Susie's Tests
tests.append_separator('Susie\'s Scores')
for test_row in suzie_tests:
tests.append(test_row)
# Write spreadsheet to disk
with open('grades.xls', 'wb') as f:
f.write(tests.export('xls'))
结果 tests.xls 将具有以下布局:
- 丹尼尔的分数:
“11/24/09”,“数学101期中考试”,56.
“05/24/10”,“数学101期末考试”,62.
- 苏西的分数:
“11/24/09”,“数学101期中考试”,56.
“05/24/10”,“数学101期末考试”,62.
格式支持
此时,只有 Excel
输出支持分隔符。
现在,去看看 API Documentation 或开始 Tablib Development .