跳转到主要内容

创建任意数据结构的库

项目描述

https://travis-ci.org/jreese/ent.svg?branch=master

ent是从类似字典的数据源生成基于属性的数据结构的基本框架

> from ent import Ent

> obj = Ent(foo='foo', bar=None)

> obj.foo
u'foo'

> obj.bar
None

ent可以包含任意嵌套的层次结构,只要每个节点/叶子是原始类型或ent

> obj = Ent({
    'foo': 'bar',
    'list': [1, 2, 3, 4],
    'inner': {
        'foo': 'baz',
        'bar': 'bang',
        },
    'ent': Ent(foo='bar'),
    })

> obj.foo
u'bar'

> obj.list[2]
3

> obj.inner.foo
u'baz'

ent可以合并和diff,并且在合并共享键时会强制类型

> ent1 = Ent(foo=1, bar=True)

> ent2 = Ent(foo='hi', bar=False, goo='win')

> Ent.merge(ent1, ent2)
<Ent {'foo': 1, 'bar': False}>

> Ent.diff(ent1, ent2)
<Ent {'bar': False}>

ent甚至提供了一个用于将Ent对象和原始JSON/YAML自动转换为彼此的占位符

> from ent import json, yaml

> json.loads('{"foo": true, "bar": null}')
<Ent {'foo': True, 'bar': None}>

> json.dumps(Ent(foo=True, bar=None))
u'{"foo": true, "bar": null}'

> yaml.safe_load('bar: null\nfoo: true\n')
<Ent {'foo': True, 'bar': None}>

> yaml.dump(Ent(foo=True, bar=None))
u'baz: 1\nfoo: bar\n'

为什么

在处理配置或从JSON等来源获取的内容时,需要不断使用括号来访问嵌套数据结构,这可能会非常烦人。

假设我们有一个包含我的个人资料的JSON小文件

{
    "name": "John Reese",
    "urls": {
        "blog": "https://noswap.com",
        "github": "https://github.com/jreese",
        "facebook": "https://#/nucleareclipse"
    }
}

现在让我们读取该数据并使用标准的json模块打印一些数据

import json

with open(...) as f:
    data = json.load(f)

name = data['name']
url = data['urls']['github']

我们可以用ent做得更好

from ent import json

with open(...) as f:
    data = json.load(f)

name = data.name
url = data.urls.github

安装

ent与Python 2.7+和Python 3.3+兼容。您可以使用以下命令从PyPI安装它

$ pip install ent

许可协议

ent版权所有2015年John Reese,并使用MIT许可协议授权。

项目详情


下载文件

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

源分布

ent-0.3.3.tar.gz (5.5 kB 查看哈希值)

上传时间 源代码

支持者