从各种文件格式生成行数据
rowgenerators的Python项目详细描述
行生成器
应用程序URL
应用程序URL提供URL的结构和操作,其中 一般来说,url指的是不能简单下载的。例如,你可以 希望引用ZIP存档中的CSV文件或Excel中的工作表 文件。与Row Generators结合使用时,应用程序url通常是 用于引用存储在数据存储库中的表格数据。例如:
- 存储在网络上:http://examples.com/file.csv
- 在网络上的zip文件中:http://example.com/archive.zip#file.csv
- excel文件中的工作表:http://example.com/excel.xls#worksheet
- 压缩存档中Excel文件中的工作表: http://example.com/archive.zip#excel.xls;worksheet
- 一个api:socrata+http://chhs.data.ca.gov/api/views/tthg-z4mf
安装
$ pip install appurl
开发说明
运行测试
运行python setup.py tests以运行正常的开发测试。您还可以运行tox,它将 尝试用Python 3.4、3.5和3.6运行测试,忽略不存在的解释器。
使用Docker进行开发测试
在开发其他版本的Python时进行测试有点麻烦,因为 要安装替代版本,tox将运行所有测试,而不仅仅是您想要的测试。
解决这个问题的一个方法是在本地安装Docker,然后运行Docker测试容器 在源目录中。这是从appurl/tests中的Makefile自动完成的
$ cd ./docker $ make build # to create the container image $ make shell # to run bash the container
现在有一个docker容器,/code目录是appurl源目录。
现在,运行tox来构建tox虚拟环境,然后输入您想要的特定版本 对虚拟环境运行测试并激活。
# tox
# cd .tox/py34
# source bin/activate # Activate the python 3.4 virtual env
# cd ../../
# python setup.py test # Cause test deps to get installed
#
# python -munittest appurl.test.test_basic.BasicTests.test_url_classes # Run one test
行数据管道
rowpipe库管理面向行的数据转换器。客户机可以创建一个rowprocessor(),它有一个由表和列组成的模式,其中每个列cna都有一个“transform”,描述如何更改列中的数据。
fromrowpipe.tableimportTablefromrowpipe.processorimportRowProcessordefdoubleit(v):returnint(v)*2env={'doubleit':doubleit}t=Table('foobar')t.add_column('id',datatype='int')t.add_column('other_id',datatype='int',transform='^row.a')t.add_column('i1',datatype='int',transform='^row.a;doubleit')t.add_column('f1',datatype='float',transform='^row.b;doubleit')t.add_column('i2',datatype='int',transform='^row.a')t.add_column('f2',datatype='float',transform='^row.b')
在这个表定义中,other_id和i2列初始化为输入行中a列的值, 将i1列初始化为输入行a列,然后对该值调用doubleit函数。在最后一步中,所有值都转换为datatype列中指定的类型
然后使用此表定义运行rowprocessor,并使用输入生成器:
classSource(object):headers='a b'.split()def__iter__(self):foriinrange(N):yieldi,2*irp=RowProcessor(Source(),t,env=env)
然后,rp是返回RowProxy对象的生成器,这些对象可以作为整数或按克隆列编号进行索引:
forrowinrp:v1=row['f1']v2=row[3]
rowsprocessor创建并执行python代码文件。
转换可以有几个步骤,用“;”分隔。第一个前缀为“^”,初始化其余转换的值。前缀为''的转换!'在异常情况下执行转换函数可以有变量签名;转换处理器与参数名匹配。有效的参数名是:
- 划船。输入行的rowproxy对象。允许访问任何输入行值
- 行号。
- 刮擦。用于临时存储的dict
- 错误。用于存储列错误报告的defaultdict(set)。键是列名
- 累加器。积累价值的格言,如总和
- 管道未使用
- 捆绑。未使用
- 来源。对生成行的输入生成器的引用
- 五。输入行值
- 标题。输入行中列的标题。
- 输入行中列的索引
- 标题。输出行中列的标题。
- 输出行中列的索引
……还有很多这份文件很不完整
注释
此回购协议仍包含旧的行管道的代码,位于pipeline.py文件中。这些组件可以组合起来对行执行定义的操作,例如基于谓词跳过行、更改行数、仅返回头或尾等。代码当前未用于测试。