标签:key content ini 处理 ace 作者 hub sse ble
经过咨询库的作者,在最后留的那个问题的准确解法如下:
1
|
import glom
|
非常棒,准确来说就是得灵活运用 Coalesce 方法啊,不能太死板。非常 Pythonic。 另附网址,作者有个很搞笑 little four hair , 哈哈哈哈 Issue 地址
1
|
pip install glom
|
glom,官方的说法是用 PYTHONIC 的方式来处理内嵌的数据。对于现实世界中的数据处理更加给力,现实世界中的数据,我的理解就是 AJAX 越来越流行了,处理这类数据会越来越频繁。有如下特点:
下面的脚本包导入
1
|
from glom import glom
|
下面的 data 就是个简单的嵌套数据,一般都可以用下面几种方法进行处理
1
|
data = {‘a‘: {‘b‘: {‘c‘: ‘d‘}}}
|
但是当我们的数据改变成下面的这样时:
1
|
data2 = {‘a‘: {‘b‘: None}}
|
会报错,而且由于是嵌套数据,从错误信息里我们只知道有个 None 值,但是到底谁是呢,是 a,是 b 呢,反正肯定不是我们的朋友小哪吒。
那么 glom 怎么处理上面的数据呢? 如其所言,路径式:
1
|
data = {‘a‘: {‘b‘: {‘c‘: ‘d‘}}}
|
看起来还是很优雅, 很 Pythonic。
1
|
data2 = {‘a‘: {‘b‘: None}}
|
错误信息如下:
1
|
glom.core.PathAccessError: could not access ‘c‘, part 2 of Path(‘a‘, ‘b‘, ‘c‘), got error: AttributeError("‘NoneType‘ object has no attribute ‘c‘",)
|
很明显,这个错误就很直观。 难道仅仅只有这个?当然不是
上面的是原标题,我的理解是不仅仅获取数据,还有别的呢。 首先,介绍两个基本的术语
1
|
target 目标数据,可以是字典,列表,或其他任意的对象
|
现在让我们跟随宇航员的脚步,探索太阳系吧。
1
|
target = {‘galaxy‘: {‘system‘: {‘planet‘: ‘jupiter‘}}}
|
1
|
target = {‘system‘: {‘planets‘: [{‘name‘: ‘earth‘}, {‘name‘: ‘jupiter‘}]}}
|
1
|
glom(target, (‘system.planets‘, [‘name‘]))
|
是不是很简单。那么现在新需求又来了,宇航员想得到下面这个数据里面的行星的卫星的数:
1
|
target = {‘system‘: {‘planets‘: [{‘name‘: ‘earth‘, ‘moons‘: 1},
|
1
|
# 自定义的格式
|
Coalesce 是 glom 定义的一种结构,允许我们对于 spec 中的子 spec 进行进一步的处理,你只要在子 spec 中将可能存在的值定义好就行了,听起来有点绕,现在来梳理一下。
1
|
spec = {‘names‘: (‘system.planets‘, [‘name‘]),
|
1
|
target = {‘system‘: {
|
1
|
target = {‘system‘: {‘dwarf_planets‘: [{‘name‘: ‘pluto‘, ‘moons‘: 5},
|
可以看到,依然可以使用相同的 spec 来解析不同的目标数据。 有意思的是,你可以在 target 里面同时写入 plantes 和 dwarf_plants 数据试试看,会返回什么数据。 【这里应该是个惰性的匹配,只要匹配到一个,后面的就不再去匹配了】
真正的原生 python 在 glom 里面,你可以传值给 python 里面的任意的函数 举例:
1
|
target = {‘system‘: {‘planets‘: [{‘name‘: ‘earth‘, ‘moons‘: 1},
|
原教程这里还有个案例,但是我还没有理解好,就不写出来了,大家可以点击链接自己看一下。
下一节,为大家带来其中一些重要的函数。 最后,在用的过程中,一直有个疑问,数据如下:
1
|
target = {
|
现在,我想返回的数据格式为:
1
|
{‘name‘: ‘just_for_test‘, ‘likes‘: [‘basketball‘, ‘football‘, ‘water‘]}
|
一开始我以为可以这么用:
1
|
spec = {
|
但是不行,这样会报错。后来用了另外的方法:
1
|
spec = {
|
这样感觉很不爽啊,还望会的同学不吝赐教啊。
转自:https://cuiqingcai.com/6182.html
标签:key content ini 处理 ace 作者 hub sse ble
原文地址:https://www.cnblogs.com/tjp40922/p/14095058.html