在python中使用表模式的实用程序库
tableschema的Python项目详细描述
表模式py
在python中使用表模式的库。
功能
表
使用表架构描述的数据表模式
表示表模式字段
表示表架构字段验证
以验证表架构推断
从数据推断表模式- 用于验证和推断模式的内置命令行界面
- 存储/插件系统将表连接到不同的存储后端,如SQL数据库
开始吸气
安装
包使用语义版本控制。这意味着主要版本可能包括破坏性更改。强烈建议在设置/要求
文件中指定表模式
版本范围,例如表模式
$ pip install tableschema
示例
本自述中的代码示例需要Python3.4+解释器。您可以在示例目录中看到更多示例。
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
文档
表
表格是表格数据世界的核心概念。它用元数据(表模式)表示数据。让我们看看如何在实践中使用它。
假设我们有一些本地csv文件。它可以是内联数据或远程链接-都由table
类支持(当然,在浏览器中使用的本地文件除外)。但假设现在是data.csv
city,location london,"51.50,-0.11" paris,"48.85,2.30" rome,N/A
让我们创建并读取一个表。我们使用statictable.load
方法和table.read
方法和键控选项来获取键控行数组:
table=Table('data.csv')table.headers# ['city', 'location']table.read(keyed=True)# [# {city: 'london', location: '51.50,-0.11'},# {city: 'paris', location: '48.85,2.30'},# {city: 'rome', location: 'N/A'},# ]
我们可以看到我们的位置只是一条线。但应该是地质点。罗马的位置也不可用,但它也是一个n/a
字符串,而不是javascriptnull
。首先我们必须推断表模式:
table.infer()table.schema.descriptor# { fields:# [ { name: 'city', type: 'string', format: 'default' },# { name: 'location', type: 'geopoint', format: 'default' } ],# missingValues: [ '' ] }table.read(keyed=True)# Fails with a data validation error
让我们修复不可用的位置。表架构规范中有一个missingValues
属性。作为第一次尝试,我们在table.schema.descriptor
中将missingValues
设置为n/a
。架构描述符可以就地更改,但所有更改都应该由tabl提交e.schema.commit()
:
table.schema.descriptor['missingValues']='N/A'table.schema.commit()table.schema.valid# falsetable.schema.errors# [<ValidationError: "'N/A' is not of type 'array'">]
作为一个优秀的citiziens,我们决定检查模式描述符的有效性。这是无效的!我们应该为missingValues
属性使用数组。也不要忘记将空字符串作为缺少的值:
table.schema.descriptor['missingValues']=['','N/A']table.schema.commit()table.schema.valid# true
一切都好。看来我们已经准备好再次读取数据:
table.read(keyed=True)# [# {city: 'london', location: [51.50,-0.11]},# {city: 'paris', location: [48.85,2.30]},# {city: 'rome', location: null},# ]
现在我们看到:
- 位置是带有数字格和经度的数组
- 罗马的位置是一个本地python
none
由于数据读取没有错误,我们可以确保我们的数据在模式中是有效的。让我们保存它:
table.schema.save('schema.json')table.save('data.csv')
我们的data.csv
看起来是一样的,因为它已经被严格化为csv
格式。但现在我们有了schema.json
$ pip install tableschema0
如果我们决定进一步改进它,我们可以更新模式文件,然后再次打开它。但现在提供一个模式路径:
$ pip install tableschema1
这只是对表
类的基本介绍。要了解更多信息,让我们查看表
类api参考。
表(source,schema=none,strict=false,post_cast=[],storage=none,**选项)
要实例化表
类的构造函数。如果提供了引用,则在任何读取操作中将检查外键。
源(str/list[])
-数据源(其中之一):- 本地文件(路径)
- 远程文件(URL)
- 表示行的数组数组
模式(任意)
-所有形式的数据模式,由模式支持
类strict(bool)
-传递到架构的严格选项
构造函数后转换(函数[])
-后转换处理器列表存储(none/str)
-存储名称,如sql
或bigquery
选项(dict)
-制表器
或存储选项(exceptions.tableSchemaException)
-引发表创建过程中发生的任何错误(表)
-返回数据表类实例
表格标题
(str[])
-返回数据源头
表.架构
(schema)
-返回schema类实例
table.iter(keyed=fase,extended=false,cast=true,relations=false)
iter通过表数据并发出基于表模式的行转换。可以禁用数据广播。
键控(bool)
-iter键控行扩展(bool)
-iter扩展行强制转换(bool)
-如果为false,则禁用数据强制转换关系(dict)
-外键引用的dict形式为{resource1:[{field1:value1,field2:value2},…],…}
。如果提供外键字段,将选中并解析为其引用(exceptions.tableSchemaException)
-引发此进程中发生的任何错误(any[]/any{})
-生成行:[value1,value2]
-base{header1:value1,header2:value2}
-keyed[行号,[header1,header2],[value1,value2]]
-扩展
table.read(keyed=false,extended=false,cast=true,relations=false,limit=none)
读取整个表并以行数组的形式返回。行数可以限制。
键控(bool)
-发出键控行的标志扩展(bool)
-发出扩展行的标志强制转换(bool)
-如果为false,则禁用数据强制转换的标志关系(dict)
-外键引用的dict形式为{resource1:[{field1:value1,field2:value2},…],…}
。如果提供外键字段,则将检查并解析为其refeReals限制(int)
-要返回的行的整数限制(exceptions.tableSchemaException)
-引发此进程中发生的任何错误(list[])
-返回行数组(请参见table.iter
)
表.推断(极限=100,置信度=0.75)
推断表的架构。它将根据表数据推断表模式并将其设置为table.schema。
限制(int)
-限制行样本大小置信度(float)
-允许多少铸造错误(以比率表示,介于0和1之间)(dict)
-返回表架构描述符
表.保存(目标,存储=无,**选项)
< Buff行情>要保存架构,请使用table.schema.save()
使用,
(逗号)分隔符将数据源以csv格式保存到本地文件
目标(str)
-保存目标(例如文件路径)存储(none/str)
-存储名称,如sql
或bigquery
选项(dict)
-制表器
或存储选项(exceptions.tableSchemaException)
-如果存在保存问题,则引发错误(true/storage)
-返回true或存储实例
模式
模式的一种模型,具有处理模式和支持数据的有用方法。架构实例可以用架构源作为json文件或json对象的url来初始化。架构最初被验证(请参见下面的验证)。默认情况下,验证错误将存储在schema.errors
中,但在严格模式下,会立即引发验证错误。
让我们创建一个空白模式。它无效,因为表架构需要descriptor.fields
属性。规范:
$ pip install tableschema2
要避免手工创建模式描述符,我们将使用schema.infer方法从给定的数据推断描述符:
$ pip install tableschema3
现在我们有了一个推断的模式,它是有效的。我们可以根据我们的模式来转换数据行。我们提供一个输入字符串,输出将相应地进行转换:
$ pip install tableschema4
但是,如果我们尝试为age
字段强制转换提供一些缺少的值,则会失败,因为目前只有一个可能缺少的值是空字符串。让我们更新我们的模式:
$ pip install tableschema5
我们可以将架构保存到本地文件。我们可以随时从本地文件加载工作:
$ pip install tableschema6
这只是模式
类的基本介绍。要了解更多信息,让我们看看schema
class api引用。
架构(描述符,strict=false)
要实例化架构的构造函数
类。
描述符(str/dict)
-架构描述符:- 本地路径
- 远程URL
- 字典
strict(bool)
-更改验证行为的标志:- 如果不引发假错误,则所有错误都将收集到架构中。错误
- 如果strict为true,则将立即引发任何验证错误
(exceptions.tableSchemaException)
-引发进程中发生的任何错误(schema)
-返回schema类实例
架构。有效
(bool)
-返回验证状态。在严格模式下总是正确的。
架构。错误
(异常[])
-返回验证错误。在严格模式下总是空的。
(dict)
-返回模式描述符
模式.主键
(str[])
-返回scHEMA主键
架构。外键
(dict[])
-返回架构外键
架构字段
(field[])
-返回字段的数组
实例
架构.字段名
(str[])
-返回字段名数组。
schema.get_字段(名称)
按名称获取架构字段。
注意:如果要修改字段描述符,请使用更新字段
。
名称(str)
-架构字段名(field/none)
-返回字段
实例,如果未找到则返回空值
schema.add_field(描述符)
将新字段添加到架构。将使用新添加的字段描述符验证架构描述符。
描述符(dict)
-字段描述符(exceptions.tableSchemaException)
-引发进程中发生的任何错误(field/none)
-返回added字段
实例,如果未添加则返回null
schema.update_字段(名称,更新)
按名称更新现有描述符字段
名称(str)
-架构字段名更新(dict)
-更新以应用于字段的描述符(bool)
-成功时返回true,如果未找到要修改的字段,则返回false
cfschema.commit()
示例
架构。删除字段(名称)
按名称删除字段资源。删除字段描述符后,将验证架构描述符。
名称(str)
-架构字段名(exceptions.tableSchemaException)
-引发进程中发生的任何错误(field/none)
-返回removed字段
实例,如果找不到则返回null
schema.cast_row(row)
根据字段类型和格式转换行。
行(任意[])
-数据行作为值数组(任意[])
-返回强制转换数据行
schema.infer(行,头=1,置信度=0.75,猜测器=none,解析器=none)
根据数据样本推断并设置schema.descriptor
行(list[])
-表示行的数组数组。头(int/str[])
-数据示例头(其中之一):- 包含标题的行号(
行
应包含标题行) - 标题数组(
行
不应包含标题行)
- 包含标题的行号(
置信度(float)
-允许多少铸造错误(以比率表示,介于0和1之间)猜测器
&;解析器
-您可以通过提供类型猜测和类型解析类来实现推理策略[实验性]{dict}
-返回表架构描述符
schema.commit(strict=none)
如果描述符中存在更改,请更新架构实例。
strict(bool)
-alterstrict
下一步工作模式(exceptions.tableSchemaException)
-引发进程中发生的任何错误(bool)
-成功时返回true,未修改时返回false
$ pip install tableschema7
schema.save(目标)
将架构描述符保存到目标目标目标。
目标(str)
-保存描述符的路径(exceptions.tableSchemaException)
-引发进程中发生的任何错误(bool)
-成功时返回true
字段
$ pip install tableschema8
数据值可以通过字段实例强制转换为本机python对象。类型实例可以用字段描述符。这允许定义格式和约束。
强制转换值将检查该值是否为预期类型、格式是否正确以及是否符合架构所施加的任何约束。例如,日期值(iso 8601格式)可以与日期类型实例一起转换。无法转换的值将引发invalidcasterror
异常。
转换不满足约束的值将引发constraintror
异常。
下面是字段的api引用
类:
新字段(描述符,缺失值=['')
构造函数来实例化字段
类。
描述符(dict)
-模式字段描述符missingValues(str[])
-一个带有字符串的数组,表示缺少的值(exceptions.tableSchemaException)
-引发进程中发生的任何错误(字段)
-返回字段类实例
字段名
(str)
-返回字段名
字段。键入
(str)
-返回字段类型
字段.格式
(str)
-返回字段格式
字段。必需的
(bool)
-如果需要字段,则返回true
字段.约束条件
(dict)
-返回具有字段约束的对象
字段描述符
(dict)
-返回字段描述符
字段.castValue(值,约束=真)
根据字段类型和格式转换给定值。
值(任意)
-要对字段强制转换的值约束(boll/str[])
-获取约束配置
- 可以将其设置为true以禁用约束检查
- 它可以是一个要检查的约束数组,例如.['minimum','maximum']
(exceptions.tableSchemaException)
-引发进程中发生的任何错误(任意)
-返回强制转换值
字段.测试值(值,约束=真)
测试值是否与字段相符。
值(任意)
-要对字段强制转换的值约束(bool/str[])
-约束配置
(bool)
-如果值符合字段,则返回
验证
将模式作为json文件、json文件的url或python dict,validate
返回有效表模式的true
,或引发异常,exceptions.validationerror
。它只验证模式,而不是针对模式的数据!
$ pip install tableschema
9
验证(描述符)
验证表架构描述符。
描述符(str/dict)
-架构描述符(其中之一):
- 本地路径
- 远程URL
- 对象
- (exceptions.validationerror)-无效时引发
(bool)
-有效时返回true
推断
给定头和数据,infer
将根据数据值以python dict的形式返回表模式。给定数据文件,data_to_infer.csv
:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
0
我们为这个文件调用infer
:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
1
infer
使用的行数可以使用limit
参数进行限制。
推断(源,标题=1,限制=100,置信度=0.75,**选项)
推断源架构。
源(任意)
-源作为路径、url或内联数据标题(int/str[])
-标题行数或标题列表置信度(float)
-允许多少铸造错误(以比率表示,介于0和1)(exceptions.tableSchemaException)
-引发进程中发生的任何错误(dict)
-返回模式描述符
例外情况
异常.tableSchemaException
所有库异常的基类。如果有多个错误,可以从异常对象中读取:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
2
异常。加载错误
所有加载错误。
异常.validationerror
所有验证错误。
异常。casterror
所有值转换错误。
异常。关系错误
所有完整性错误。
异常。存储错误
所有存储错误。
存储
该库包含接口声明,以实现表格式存储。此接口允许使用不同的数据存储系统,如sql和tableschema.table
类(加载/保存)以及数据包级别:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)3
存储连接(名称,**选项)
根据存储名称创建表格存储。
名称(str)
-类似于SQL的存储名称
选项(dict)
-具体存储选项
(exceptions.storageerror)
-任何错误都会引发
(存储)
-返回存储
实例
实现者应该遵循tableschema.storage
接口来编写自己的存储后端。具体的存储后端可以包括特定于conrete存储系统的附加功能。请参见下面的"插件"系统,了解如何将自定义存储插件集成到您的工作流中。
<;<;interface>;>storage(**选项)
创建表格存储。实现应该完全实现这个接口,以便与存储api兼容。
选项(dict)
-具体存储选项
(exceptions.storageerror)
-任何错误都会引发
(存储)
-返回存储
实例
存储.存储桶
返回存储桶名称列表。bucket是一个特殊的术语,其含义与表中的术语几乎相同。您应该将bucket
视为存储在存储器中的表
(exceptions.storageerror)
-任何错误都会引发
str[]
-返回存储桶名称列表
创建(bucket,descriptor,force=false)
创建一个/多个存储桶。
存储桶(str/list)
-存储桶名称或存储桶名称列表
描述符(dict/dict[])
-模式描述符或描述符列表
强制(bool)
-删除并重新创建已存在的存储桶(exceptions.storageerror)
-任何错误都会引发
删除(bucket=none,ignore=false)
删除一个/多个/所有存储桶。
bucket(str/list/none)
-要删除的bucket名称或bucket名称列表。如果没有,将删除所有存储桶描述符(dict/dict[])
-模式描述符或描述符列表
忽略(bool)
-从存储中删除不存在的存储桶时不会引发错误
(exceptions.storageerror)
-rais任何错误的ES
描述(bucket,descriptor=none)
获取/设置bucket的表架构描述符。
存储桶(str)
-存储桶名称描述符(dict/none)
-要设置的架构描述符(exceptions.storageerror)
-任何错误都会引发
(dict)
-返回表架构描述符
iter(桶)
此方法应根据此存储桶的架构输入值。
存储桶(str)
-存储桶名称(exceptions.storageerror)
-任何错误都会引发
(list[])
-生成数据行
读取(存储桶)
此方法应根据此存储桶的架构读取类型化值。
存储桶(str)
-存储桶名称(exceptions.storageerror)
-任何错误都会引发
(list[])
-返回数据行
写入(存储桶,行)
此方法将数据行写入存储中。它应该在内部将不支持类型的值存储为字符串(就像csv那样)。
存储桶(str)
-存储桶名称行(list[])
-要写入的数据行
(exceptions.storageerror)
-任何错误都会引发
插件
表架构有一个插件系统。任何名为tableschema<;name>;
的包都可以导入为:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
4
如果未安装插件,importorror
将显示一条消息,说明如何安装插件。
官方插件
CLI
< Buff行情>这是一个临时api,不包括在semver中。如果您将其用作其他程序的一部分,请将具体的tableschema
版本固定到您的需求文件中。
表模式具有一个名为table schema
的cli。此cli公开infer
和validate
函数以供命令行使用。
validate
用法示例:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
5
推断
用法示例:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
6
响应是一个json模式。可选参数--encoding
允许为数据文件指定字符编码。默认为UTF-8。
贡献
该项目遵循开放知识国际编码标准。
建议的入门方法是创建和激活项目虚拟环境。
要将包和开发依赖项安装到活动环境中,请执行以下操作:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
7
要使用绒布和覆盖率运行测试:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
8
对于linting,使用在pylama.ini中配置的pylama。在这个舞台上
安装到您的环境中,可以与更细粒度的控件分开使用
如文档中所述-https://pylama.readthedocs.io/en/latest/
例如,按错误类型对结果排序:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
9
使用tox.ini
中配置的测试tox
。
它已经安装到您的环境中,可以与文档中描述的更细粒度的控件一起单独使用-https://testrun.org/tox/latest/
例如,根据python 2环境检查测试子集,增加了详细程度。
--
之后的所有位置参数和选项都将传递到py.test
:
city,location
london,"51.50,-0.11"
paris,"48.85,2.30"
rome,N/A
0
引擎盖下的tox
使用pytest
在pytest.ini中配置的
以及模拟包。此软件包仅在TOX环境下可用。
更改日志
这里只描述了打破和最重要的变化。所有发布版本的完整变更日志和文档都可以在格式良好的提交历史记录中找到。
1.6版
- 在
strict
模式下,如果字段构造有问题,则引发异常
1.5版
- 允许提供自定义猜测器和解析程序到架构推断
1.4版
- 添加了schema.update_字段
方法1.3版
- 支持DateTime,无时间进行日期转换
1.2版
- 支持像1.0这样的浮点数,用于整型转换
1.1版
- 将
置信度
参数添加到推断
1.0版
- 该库已在无摩擦数据规范v1-https://friectionlessdata.io/specs/table schema/
推荐PyPI第三方库
(str)
-返回字段格式
字段。必需的
(bool)
-如果需要字段,则返回true
字段.约束条件
(dict)
-返回具有字段约束的对象
字段描述符
(dict)
-返回字段描述符
字段.castValue(值,约束=真)
根据字段类型和格式转换给定值。
值(任意)
-要对字段强制转换的值约束(boll/str[])
-获取约束配置
- 可以将其设置为true以禁用约束检查
- 它可以是一个要检查的约束数组,例如.['minimum','maximum']
(exceptions.tableSchemaException)
-引发进程中发生的任何错误(任意)
-返回强制转换值
字段.测试值(值,约束=真)
测试值是否与字段相符。
值(任意)
-要对字段强制转换的值约束(bool/str[])
-约束配置
(bool)
-如果值符合字段,则返回
验证
将模式作为json文件、json文件的url或python dict,validate
返回有效表模式的true
,或引发异常,exceptions.validationerror
。它只验证模式,而不是针对模式的数据!
$ pip install tableschema
9
验证(描述符)
验证表架构描述符。
描述符(str/dict)
-架构描述符(其中之一):
- 本地路径
- 远程URL
- 对象
- (exceptions.validationerror)-无效时引发
(bool)
-有效时返回true
推断
给定头和数据,infer
将根据数据值以python dict的形式返回表模式。给定数据文件,data_to_infer.csv
:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
0
我们为这个文件调用infer
:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
1
infer
使用的行数可以使用limit
参数进行限制。
推断(源,标题=1,限制=100,置信度=0.75,**选项)
推断源架构。
源(任意)
-源作为路径、url或内联数据标题(int/str[])
-标题行数或标题列表置信度(float)
-允许多少铸造错误(以比率表示,介于0和1)(exceptions.tableSchemaException)
-引发进程中发生的任何错误(dict)
-返回模式描述符
例外情况
异常.tableSchemaException
所有库异常的基类。如果有多个错误,可以从异常对象中读取:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
2
异常。加载错误
所有加载错误。
异常.validationerror
所有验证错误。
异常。casterror
所有值转换错误。
异常。关系错误
所有完整性错误。
异常。存储错误
所有存储错误。
存储
该库包含接口声明,以实现表格式存储。此接口允许使用不同的数据存储系统,如sql和tableschema.table
类(加载/保存)以及数据包级别:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)3
存储连接(名称,**选项)
根据存储名称创建表格存储。
名称(str)
-类似于SQL的存储名称
选项(dict)
-具体存储选项
(exceptions.storageerror)
-任何错误都会引发
(存储)
-返回存储
实例
实现者应该遵循tableschema.storage
接口来编写自己的存储后端。具体的存储后端可以包括特定于conrete存储系统的附加功能。请参见下面的"插件"系统,了解如何将自定义存储插件集成到您的工作流中。
<;<;interface>;>storage(**选项)
创建表格存储。实现应该完全实现这个接口,以便与存储api兼容。
选项(dict)
-具体存储选项
(exceptions.storageerror)
-任何错误都会引发
(存储)
-返回存储
实例
存储.存储桶
返回存储桶名称列表。bucket是一个特殊的术语,其含义与表中的术语几乎相同。您应该将bucket
视为存储在存储器中的表
(exceptions.storageerror)
-任何错误都会引发
str[]
-返回存储桶名称列表
创建(bucket,descriptor,force=false)
创建一个/多个存储桶。
存储桶(str/list)
-存储桶名称或存储桶名称列表
描述符(dict/dict[])
-模式描述符或描述符列表
强制(bool)
-删除并重新创建已存在的存储桶(exceptions.storageerror)
-任何错误都会引发
删除(bucket=none,ignore=false)
删除一个/多个/所有存储桶。
bucket(str/list/none)
-要删除的bucket名称或bucket名称列表。如果没有,将删除所有存储桶描述符(dict/dict[])
-模式描述符或描述符列表
忽略(bool)
-从存储中删除不存在的存储桶时不会引发错误
(exceptions.storageerror)
-rais任何错误的ES
描述(bucket,descriptor=none)
获取/设置bucket的表架构描述符。
存储桶(str)
-存储桶名称描述符(dict/none)
-要设置的架构描述符(exceptions.storageerror)
-任何错误都会引发
(dict)
-返回表架构描述符
iter(桶)
此方法应根据此存储桶的架构输入值。
存储桶(str)
-存储桶名称(exceptions.storageerror)
-任何错误都会引发
(list[])
-生成数据行
读取(存储桶)
此方法应根据此存储桶的架构读取类型化值。
存储桶(str)
-存储桶名称(exceptions.storageerror)
-任何错误都会引发
(list[])
-返回数据行
写入(存储桶,行)
此方法将数据行写入存储中。它应该在内部将不支持类型的值存储为字符串(就像csv那样)。
存储桶(str)
-存储桶名称行(list[])
-要写入的数据行
(exceptions.storageerror)
-任何错误都会引发
插件
表架构有一个插件系统。任何名为tableschema<;name>;
的包都可以导入为:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
4
如果未安装插件,importorror
将显示一条消息,说明如何安装插件。
官方插件
CLI
< Buff行情>这是一个临时api,不包括在semver中。如果您将其用作其他程序的一部分,请将具体的tableschema
版本固定到您的需求文件中。
表模式具有一个名为table schema
的cli。此cli公开infer
和validate
函数以供命令行使用。
validate
用法示例:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
5
推断
用法示例:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
6
响应是一个json模式。可选参数--encoding
允许为数据文件指定字符编码。默认为UTF-8。
贡献
该项目遵循开放知识国际编码标准。
建议的入门方法是创建和激活项目虚拟环境。
要将包和开发依赖项安装到活动环境中,请执行以下操作:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
7
要使用绒布和覆盖率运行测试:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
8
对于linting,使用在pylama.ini中配置的pylama。在这个舞台上
安装到您的环境中,可以与更细粒度的控件分开使用
如文档中所述-https://pylama.readthedocs.io/en/latest/
例如,按错误类型对结果排序:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)
9
使用tox.ini
中配置的测试tox
。
它已经安装到您的环境中,可以与文档中描述的更细粒度的控件一起单独使用-https://testrun.org/tox/latest/
例如,根据python 2环境检查测试子集,增加了详细程度。
--
之后的所有位置参数和选项都将传递到py.test
:
city,location
london,"51.50,-0.11"
paris,"48.85,2.30"
rome,N/A
0
引擎盖下的tox
使用pytest
在pytest.ini中配置的
以及模拟包。此软件包仅在TOX环境下可用。
更改日志
这里只描述了打破和最重要的变化。所有发布版本的完整变更日志和文档都可以在格式良好的提交历史记录中找到。
1.6版
- 在
strict
模式下,如果字段构造有问题,则引发异常
1.5版
- 允许提供自定义猜测器和解析程序到架构推断
1.4版
- 添加了schema.update_字段
方法1.3版
- 支持DateTime,无时间进行日期转换
1.2版
- 支持像1.0这样的浮点数,用于整型转换
1.1版
- 将
置信度
参数添加到推断
1.0版
- 该库已在无摩擦数据规范v1-https://friectionlessdata.io/specs/table schema/
(dict)
-返回具有字段约束的对象
字段描述符
(dict)
-返回字段描述符
字段.castValue(值,约束=真)
根据字段类型和格式转换给定值。
值(任意)
-要对字段强制转换的值约束(boll/str[])
-获取约束配置- 可以将其设置为true以禁用约束检查
- 它可以是一个要检查的约束数组,例如.['minimum','maximum']
(exceptions.tableSchemaException)
-引发进程中发生的任何错误(任意)
-返回强制转换值
字段.测试值(值,约束=真)
测试值是否与字段相符。
值(任意)
-要对字段强制转换的值约束(bool/str[])
-约束配置(bool)
-如果值符合字段,则返回
验证
将模式作为json文件、json文件的url或python dict,validate
返回有效表模式的true
,或引发异常,exceptions.validationerror
。它只验证模式,而不是针对模式的数据!
$ pip install tableschema9
验证(描述符)
验证表架构描述符。
描述符(str/dict)
-架构描述符(其中之一):- 本地路径
- 远程URL
- 对象
- (exceptions.validationerror)-无效时引发
(bool)
-有效时返回true
推断
给定头和数据,infer
将根据数据值以python dict的形式返回表模式。给定数据文件,data_to_infer.csv
:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)0
我们为这个文件调用infer
:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)1
infer
使用的行数可以使用limit
参数进行限制。
推断(源,标题=1,限制=100,置信度=0.75,**选项)
推断源架构。
源(任意)
-源作为路径、url或内联数据标题(int/str[])
-标题行数或标题列表置信度(float)
-允许多少铸造错误(以比率表示,介于0和1)(exceptions.tableSchemaException)
-引发进程中发生的任何错误(dict)
-返回模式描述符
例外情况
异常.tableSchemaException
所有库异常的基类。如果有多个错误,可以从异常对象中读取:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)2
异常。加载错误
所有加载错误。
异常.validationerror
所有验证错误。
异常。casterror
所有值转换错误。
异常。关系错误
所有完整性错误。
异常。存储错误
所有存储错误。
存储
该库包含接口声明,以实现表格式存储。此接口允许使用不同的数据存储系统,如sql和tableschema.table
类(加载/保存)以及数据包级别:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)3
存储连接(名称,**选项)
根据存储名称创建表格存储。
名称(str)
-类似于SQL的存储名称选项(dict)
-具体存储选项(exceptions.storageerror)
-任何错误都会引发(存储)
-返回存储
实例
实现者应该遵循tableschema.storage
接口来编写自己的存储后端。具体的存储后端可以包括特定于conrete存储系统的附加功能。请参见下面的"插件"系统,了解如何将自定义存储插件集成到您的工作流中。
<;<;interface>;>storage(**选项)
创建表格存储。实现应该完全实现这个接口,以便与存储
api兼容。
选项(dict)
-具体存储选项(exceptions.storageerror)
-任何错误都会引发(存储)
-返回存储
实例
存储.存储桶
返回存储桶名称列表。bucket是一个特殊的术语,其含义与表中的术语几乎相同。您应该将bucket
视为存储在存储器中的
表
(exceptions.storageerror)
-任何错误都会引发str[]
-返回存储桶名称列表
创建(bucket,descriptor,force=false)
创建一个/多个存储桶。
存储桶(str/list)
-存储桶名称或存储桶名称列表描述符(dict/dict[])
-模式描述符或描述符列表强制(bool)
-删除并重新创建已存在的存储桶(exceptions.storageerror)
-任何错误都会引发
删除(bucket=none,ignore=false)
删除一个/多个/所有存储桶。
bucket(str/list/none)
-要删除的bucket名称或bucket名称列表。如果没有,将删除所有存储桶描述符(dict/dict[])
-模式描述符或描述符列表忽略(bool)
-从存储中删除不存在的存储桶时不会引发错误(exceptions.storageerror)
-rais任何错误的ES
描述(bucket,descriptor=none)
获取/设置bucket的表架构描述符。
存储桶(str)
-存储桶名称描述符(dict/none)
-要设置的架构描述符(exceptions.storageerror)
-任何错误都会引发(dict)
-返回表架构描述符
iter(桶)
此方法应根据此存储桶的架构输入值。
存储桶(str)
-存储桶名称(exceptions.storageerror)
-任何错误都会引发(list[])
-生成数据行
读取(存储桶)
此方法应根据此存储桶的架构读取类型化值。
存储桶(str)
-存储桶名称(exceptions.storageerror)
-任何错误都会引发(list[])
-返回数据行
写入(存储桶,行)
此方法将数据行写入存储中。它应该在内部将不支持类型的值存储为字符串(就像csv那样)。
存储桶(str)
-存储桶名称行(list[])
-要写入的数据行(exceptions.storageerror)
-任何错误都会引发
插件
表架构有一个插件系统。任何名为tableschema<;name>;
的包都可以导入为:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)4
如果未安装插件,importorror
将显示一条消息,说明如何安装插件。
官方插件
CLI
< Buff行情>这是一个临时api,不包括在semver中。如果您将其用作其他程序的一部分,请将具体的tableschema
版本固定到您的需求文件中。
表模式具有一个名为table schema
的cli。此cli公开infer
和validate
函数以供命令行使用。
validate
用法示例:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)5
推断
用法示例:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)6
响应是一个json模式。可选参数--encoding
允许为数据文件指定字符编码。默认为UTF-8。
贡献
该项目遵循开放知识国际编码标准。
建议的入门方法是创建和激活项目虚拟环境。 要将包和开发依赖项安装到活动环境中,请执行以下操作:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)7
要使用绒布和覆盖率运行测试:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)8
对于linting,使用在pylama.ini中配置的pylama。在这个舞台上 安装到您的环境中,可以与更细粒度的控件分开使用 如文档中所述-https://pylama.readthedocs.io/en/latest/
例如,按错误类型对结果排序:
fromtableschemaimportTable# Create tabletable=Table('path.csv',schema='schema.json')# Print schema descriptorprint(table.schema.descriptor)# Print cast rows in a dict formforkeyed_rowintable.iter(keyed=True):print(keyed_row)9
使用tox.ini
中配置的测试tox
。
它已经安装到您的环境中,可以与文档中描述的更细粒度的控件一起单独使用-https://testrun.org/tox/latest/
例如,根据python 2环境检查测试子集,增加了详细程度。
--
之后的所有位置参数和选项都将传递到py.test
:
city,location london,"51.50,-0.11" paris,"48.85,2.30" rome,N/A0
引擎盖下的tox
使用pytest
在pytest.ini中配置的
以及模拟包。此软件包仅在TOX环境下可用。
更改日志
这里只描述了打破和最重要的变化。所有发布版本的完整变更日志和文档都可以在格式良好的提交历史记录中找到。
1.6版
- 在
strict
模式下,如果字段构造有问题,则引发异常
1.5版
- 允许提供自定义猜测器和解析程序到架构推断
1.4版
- 添加了schema.update_字段
置信度
参数添加到推断