创建任意数据结构的库
项目描述
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 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | fef020d2f7db222fee188e7b6be92c8e0c5f94029848f0a89c9dff057c3bc7bc |
|
| MD5 | 76ebe626ffbe1270903025675de1d733 |
|
| BLAKE2b-256 | 4f37ab1179bbd7276a25c37fc442edbb626f12e57ff69c94eaff3a84d7ae7bc0 |