在python中使用json表模式的实用程序库

jsontableschema的Python项目详细描述


#json表模式

[![特拉维斯](https://travis-ci.org/friectionlessdata/jsontableschema-py.svg?branch=master)(https://travis ci.org/frictionlessdata/jsontableschema py)
[![工作服](http://img.shields.io/covertalls/frictionlessdata/jsontableschema-py.svg?branch=master)(https://coveralls.io/r/friectionlessdata/jsontableschema-py?分支=主)
[![pypi](https://img.shields.io/pypi/v/jsontableschema.svg)(https://pypi.python.org/pypi/jsontableschema)
[![semver](https://img.shields.io/badge/versions semver brightgreen.svg)(http://semver.org/)
[![gitter](https://img.shields.io/gitter/room/friectionlessdata/chat.svg)](https://gitter.im/friectionlessdata/chat)

python中使用[json表模式](http://dataprotocols.org/json-table-schema/)的实用程序库。

>;与v0.7更新的api以向后兼容的方式引入。可在[此处](https://github.com/frictionlessdata/json table schema py/tree/0.6.5 json table schema)找到不推荐使用的api的文档。v1版本将删除不推荐使用的api。

\features

-`table`用于json表架构描述的数据表
-`schema`表示json表架构
-`field`表示json表架构字段
-`validate`用于验证json表架构
-` infer`从数据推断json表模式
-用于验证和推断模式的内置命令行接口
-存储/插件系统用于将表连接到不同的存储后端,如sql数据库

jsontableschema
````
示例

``python
来自jsontableschema import table

create table
table=table('path.csv',schema='schema.json')

架构:

`` python
='https://raw.githubusercontent.com/okfn/jsontableschema py/master/data/data\u infer.csv'

\create sql database
db=sa.create廑engine('sqlite://')

\data processor
def skip廑under廑u 30(eRows):
row))
如果krow['age']>;=30:
yield(number,headers,row)

使用table
table=table(source,post_cast=[skip_u under_u 30])
table.schema.save('tmp/persons.json')\save inferred schema
table.save('persons',backend='sql',engine=db)\save data tosql
table.save('tmp/persons.csv')将数据保存到驱动器

36,'id':3,'name':'jane'}
```

架构实例可以使用架构源作为json文件的文件路径或url或python dict进行初始化。架构最初是经过验证的(请参见下面的[validate](validate))。如果不是有效的json表架构,则会引发异常。

``python
from json table schema import schema

‘另一个字段’)
```


-`descriptor`-返回schema descriptor
-`field s`-架构的字段实例数组
-`headers`-架构头数组
-`primary_key`-作为数组的架构的主键字段
-`foreignkey`-作为数组的架构的外键属性
-`get_field(name)`-返回给定名称的字段对象
-`has_field(name)`-如果该字段存在于架构的
-`cast_row(row,no_fail_fast=false)`-返回针对架构的行转换
-`save(target)`-将架构保存到文件系统

,其中提供了选项"no_fail_fast",它将收集遇到的所有错误和异常。将引发多重无效(如果有错误)。


value
field.cast_value('12345')->;12345
````

数据值可以通过字段实例强制转换为本机python对象。类型实例可以使用[字段描述符](http://dataprotocols.org/json table schema/字段描述符)初始化。这允许定义格式和约束。

casting一个值将检查该值是否为预期类型、格式是否正确以及是否符合架构施加的任何约束。例如,日期值(iso 8601格式)可以与日期类型实例一起转换。无法转换的值将引发"invalidcasterror"异常。

有效的json表架构,或引发异常"schemavalidationerror"。它只验证**架构**,而不是针对架构的数据!

`` python
导入io
从jsontableschema导入json


jsontableschema.exceptions.schemavalidationerror as exception:
这可以通过将"no_fail_fast"标志设置为true来完成。

`` python
尝试:
jsontableschema.validate(描述符,no_fail_fast=true)
除了json table schema.exceptions.multipleInvalid as exception:
对于exception中的错误。errors:
handle error
````

infer

给定头和数据,"infer"将根据数据值以python dict的形式返回json表模式。给定数据文件,data_to_efer.csv:

````
id,age,name
1,39,paul
2,23,jimmy
3,36,jane
4,28,judy
```

call`infer`头和数据文件中的值:

``python
import io
import csv

=stream.readline().rstrip('\n').split(',')
values=csv.reader(stream)

schema=infer(headers,values)
````

`schema`现在是模式dict:

``python
{u'fields':[
{
u'description':u',
u'format':u'default',
u'name':u'id',
u'title':u',
u'type':u'integer'
},
{
u'description':u',
u'format':u'default',
u'name':u'age',
u'title':u',
u'type':u'integer'
},
{
u'description':u',
u'format':u'default',
u'name':u'name',
u'title':u',
u'type:u'string'
}
}
```



cli

>;这是一个从semver中排除的临时api。如果您将其用作其他程序的一部分,请将具体的"goodtables"版本固定到您的需求文件中。

json表模式具有cli-called"jsontableschema"。此cli公开"infer"和"validate"函数以供命令行使用。

响应是一个json模式。可选参数"--encoding"允许为数据文件指定字符编码。默认值为utf-8。


\storage

[存储](data/storage.png)


实现者应该遵循"jsontableschema.storage"接口来编写自己的存储后端。此后端可与"table"类一起使用。请参见下面的"插件"系统,了解如何集成自定义存储插件。


json表架构有一个插件系统。任何名为"jsontableschema"的包都可以从jsontableschema导入为:

``python
。如果插件未安装,"importeror"将引发一条消息,说明如何安装插件。

官方支持的插件数量:
-bigquery storage-https://github.com/friectionlessdata/jsontableschema bigquery py
-pandas storage-https://github.com/friectionlessdata/jsontableschema pandas py
-sql storage-https://github.com/friectionlessdata/jsontableschema sql py

##API引用

快照

` ` ` ` ` ` `
表(source,schema=none,post_u cast=none,backend=none,**选项)
stream->;制表符.stream
schema->;schema
name->;str
iter(keyed/extended=false)->;(生成器)(键控/扩展)行[]
读取(键控/扩展=false,限制=none)->;(键控/扩展)行[]
保存(目标,后端=none,**选项)
架构(描述符)
描述符->;dict
字段->;字段[]
标题->;str[]
主键->;str[]
外键->;str[]
获取字段(名称)->;字段
具有字段(名称)->;bool
转换行(行,无失败快=假)->;行
保存(目标)
字段(描述符)
描述符->;dict
名称->;str
类型->;str
格式->;str
约束->;dict
转换值(value,skip_constraints=false)->;值
测试值(value,skip_constraints=false,constraints=none)->;bool
验证(描述符,no_fail_fast=false)->;bool
推断(头,值)->;描述符
异常
~cli
--
storage(**options)
bucket->;str[]
创建(bucket,descriptor,force=false)
删除(bucket=none,ignore=false)
描述(bucket,descriptor=none)->;描述符
iter(bucket)->;(生成器)行[]
读取(bucket)->;行[]
写入(bucket,行)
插件
```

贡献指南:

[如何贡献](contribution.md)


谢谢!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java流/下载文件,无需在Spring Boot中保留内存   kotlin/java是否有类似TryParse()的东西?   java Spring引导找不到用户类型的属性ID   java Spring 2到Spring 3的迁移:一个控制器用于多个视图   java包含多个程序包名为“安卓”的库。支持图样可提取'   java spring JPA是否支持自定义值框架?   java转义出基于文本字段的搜索栏   java AAPT:错误:未找到样式属性“安卓:attr/WindowsPlashCreenBackground”   java从文本文件中读取纬度和经度   java哪里可以找到如何使用排序的示例。顺序ignorecase(),其中nullhandling nulls last用于自定义Spring JPA如何提供查询   尝试使用Dialogflow上的Webhook动态给出响应时,java获取Webhook响应错误(206)   如何在java中替换匹配的字符串?   java模拟数学的最大价值。随机的   java Spring RestTemplate GET请求未给出正确响应   春爪哇。lang.IllegalArgumentException   java系统。load()永远不会发生   java剪辑循环不工作   java如何从maven构建中删除staxapi   java ThreadPoolExecutor的排队行为是否可以自定义,以更喜欢创建新线程而不是排队?