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>
用法
------
>>> 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 查看哈希值)
关闭
python-tablefu-0.4.2.zip 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e67c51438ea862a19bb91f62e30a5304864fa613daecc45ad79946b803a7f9ff |
|
MD5 | 82a6b29ddd91b33b0fdece9415e679ab |
|
BLAKE2b-256 | fea377dfe0b23c09f5a87b34997c0eb415327efc59832c87090c0d3242cd7664 |
关闭
python-tablefu-0.4.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8de8091d031633fdc3c2cb1a5c986501116ad681a7347f305f1fec7b45803719 |
|
MD5 | bf9017dca1d095cec15324a8ccc4c025 |
|
BLAKE2b-256 | 21377932aa140eb6a2d9d1e8ac7ba2430d93c847235ecef317d7ea371f5f3d3c |