跳转到主要内容

Python中操作电子表格和表格的工具,基于ProPublica的TableFu

项目描述

Python TableFu是Python中操作类似电子表格的表格的工具。它最初是ProPublica的[TableFu](http://propublica.github.com/table-fu/)的Python实现,尽管已经添加了新的方法。TableFu允许过滤、分面和数据操作。未来,该项目旨在创建类似于电子表格的ORM。

用法
------

>>> from table_fu import TableFu
>>> table = TableFu.from_file('tests/test.csv')
>>> table.columns
['作者', '最佳书籍', '页数', '风格']

# 获取所有作者
>>> table.values('作者')
['Samuel Beckett', 'James Joyce', 'Nicholson Baker', 'Vladimir Sorokin']

# 计算某一列的总数
>>> table.total('页数')
1177.0

# 过滤表格返回新的实例
>>> t2 = table.filter(Style='Modernism')
>>> list(t2)
[<行:Samuel Beckett, Malone Muert, 120, Modernism>,
<行:James Joyce, Ulysses, 644, Modernism>]


# TableFu的每个实例都像行列表
>>> table[0]
<行:Samuel Beckett, Malone Muert, 120, Modernism>

list(table.rows)
[<行:Samuel Beckett, Malone Muert, 120, Modernism>,
<行:James Joyce, Ulysses, 644, Modernism>,
<行:Nicholson Baker, Mezannine, 150, Minimalism>,
<行:Vladimir Sorokin, The Queue, 263, Satire>]

# 行,反过来,像字典一样操作
>>> row = table[1]
>>> print row['作者']
James Joyce

# 转置表格
>>> t2 = table.transpose()
>>> list(t2)
[<行:最佳书籍, Malone Muert, Ulysses, Mezannine, The Queue>,
<行:页数,120,644,150,263>
<行:风格,现代主义,现代主义,极简主义,讽刺>]

>>> t2.columns
['作者',
'塞缪尔·贝克特',
'詹姆斯·乔伊斯',
'尼科尔斯·巴克',
'弗拉基米尔·索罗金']

# 排序行
>>> table.sort('作者')
>>> table.rows
[<行:詹姆斯·乔伊斯,尤利西斯,644,现代主义>,
<行:Nicholson Baker, Mezannine, 150, Minimalism>,
<行:塞缪尔·贝克特,马隆·穆尔特,120,现代主义>,
<行:Vladimir Sorokin, The Queue, 263, Satire>]

# 排序已保存
table.options['sorted_by']
{'作者': {'reverse': False}}

# 这很有用,因为...

# 表格也可以进行切分(并且选项被复制到新表格中)
>>> for t in table.facet_by('风格')
... 打印 t.faceted_on
... t.table
极简主义
[[尼科尔斯·巴克,中庭,150,极简主义]]
现代主义
[[塞缪尔·贝克特,马隆·穆尔特,120,现代主义],
['詹姆斯·乔伊斯', '尤利西斯', '644', '现代主义']]
讽刺
[[弗拉基米尔·索罗金', '队列', '263', '讽刺']]

这是一个[高级示例](https://gist.github.com/765321),它使用切分和筛选从[这个电子表格](https://spreadsheets.google.com/ccc?key=0AprNP7zjIYS1dG5wbVJpWTVacWpUaUh5VHUxMk1wTEE&hl=en&authkey=CJfB5MYP)(从纽约时报国会API提取)生成聚合数据。

格式化
----------

过滤器是接受值和一些位置参数的函数。
新的过滤器可以通过包含的Formatter类进行注册。

>>> from table_fu.formatting import Formatter
>>> format = Formatter()
>>> def capitalize(value, *args)
... return str(value).capitalize()
>>> format.register(capitalize)
>>> print format('foo', 'capitalize')
Foo

单元格可以根据表格的规则进行格式化(如果表格进行了切分,则规则会延续)

>>> table = TableFu(open('tests/sites.csv'))
>>> table.columns
['名称', 'URL', '关于']
>>> table.formatting = {
... '名称': {'filter': 'link', 'args': ['URL']}
... }
>>> print table[0]['名称']
<a href="http://www.chrisamico.com" title="ChrisAmico.com">ChrisAmico.com</a></td></td>


HTML 输出
-----------

TableFu 可以输出指定的格式化HTML表格

>>> table = TableFu(open('tests/sites.csv'))
>>> table.columns
['名称', 'URL', '关于']
>>> table.formatting = {'名称': {'filter: 'link', 'args': ['URL']}}
>>> table.columns = '名称', '关于'
>>> print table.html()
<table>
<thead>
<tr><th>名称</th><th>关于</th></tr>
</thead>
<tbody>
<tr id="row0" class="row even"><td class="datum"><a href="http://www.chrisamico.com" title="ChrisAmico.com">ChrisAmico.com</a></td><td class="datum">我的个人网站和博客</td></tr>
<tr id="row1" class="row odd"><td class="datum"><a href="http://www.propublica.org" title="ProPublica">ProPublica</a></td><td class="datum">此库的Ruby版本构建者</td></tr>
<tr id="row2" class="row even"><td class="datum"><a href="http://www.pbs.org/newshour" title="PBS NewsHour">PBS NewsHour</a></td><td class="datum">我在哪里度过我的每一天</td></tr>
</tbody>
</table>

项目详细信息


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分发

python-tablefu-0.4.2.zip (252.4 kB 查看哈希)

上传于 源码

python-tablefu-0.4.2.tar.gz (247.4 kB 查看哈希值)

上传于 源码

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面