python中glom模块怎样安置与使用?
发布时间:2022-04-07 15:52:32 所属栏目:语言 来源:互联网
导读:这篇文章主要给大家介绍的关于python glom模块的使用,小编觉得蛮有用的,因此分享给大家作参考,感兴趣的朋友可以参考学习,下面我们就一起来看看吧。 glom模块,是 Python 处理数据的一个小模块,它具有如下特点: 嵌套结构并基于路径访问 使用轻量级的Pyt
这篇文章主要给大家介绍的关于python glom模块的使用,小编觉得蛮有用的,因此分享给大家作参考,感兴趣的朋友可以参考学习,下面我们就一起来看看吧。 glom模块,是 Python 处理数据的一个小模块,它具有如下特点: 嵌套结构并基于路径访问 使用轻量级的Pythonic规范进行声明性数据转换 可读、有意义的错误信息 内置数据探测和调试功能 看起来比较抽象,对不对?下面我们用实例来给大家演示一下。 安装 作为 Python 内置模块,相信你一定知道怎么安装: pip3 install glom 几秒钟就搞定! 简单使用 我们来看看最简单的用法: d = {"a": {"b": {"c": 1}}} print(glom(d, "a.b.c")) # 1 在这里,我们有一个嵌套三层的 json 结构,我们想获取最里层的 c 对应的值,正常的写法应该是: print(d["a"]["b"]["c"]) 如果到这里,我说 glom 比传统方式好一些,因为你不用一层层地写中括号和引号,你会不会嗤之以鼻? 好,我们再来看看下面的情况: d = {"a": {"b": None}} print(d["a"]["b"]["c"]) 遍历到一个 None 对象,你会收到下面的错误: Traceback (most recent call last): File "/Users/cxhuan/Documents/python_workspace/mypy/pmodules/pglom/glomstudy.py", line 10, in <module> print(d["a"]["b"]["c"]) TypeError: 'NoneType' object is not subscriptable 我们来看看 glom 的处理方式: from glom import glom d = {"a": {"b": None}} print(glom(d, "a.b.c")) 同样地,glom 不能把错误的输出成对的,你会得到以下错误: Traceback (most recent call last): File "/Users/cxhuan/Documents/python_workspace/mypy/pmodules/pglom/glomstudy.py", line 11, in <module> print(glom(d, "a.b.c")) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/glom/core.py", line 2181, in glom raise err glom.core.PathAccessError: error raised while processing, details below. Target-spec trace (most recent last): - Target: {'a': {'b': None}} - Spec: 'a.b.c' glom.core.PathAccessError: could not access 'c', part 2 of Path('a', 'b', 'c'), got error: AttributeError("'NoneType' object has no attribute 'c'") 如果你仔细看报错内容,你就会发现这报错内容极其详细,一目了然,这对于找程序 bug 简直是神器! 先看一个例子。我们有一个 dict ,想要获取出 所有 name 的值,我们可以通过 glom 来实现: data = {"student": {"info": [{"name": "张三"}, {"name": "李四"}]}} info = glom(data, ("student.info", ["name"])) print(info) # ['张三', '李四'] 如果用传统方式的话,我们可能会需要遍历才能获取到,但是使用 glom ,我们只需要一行代码就可以了,输出是一个数组。 如果你不想输出数组,而是想要一个 dict 的话,那也是很简单的: info = glom(data, {"info": ("student.info", ["name"])}) print(info) # {'info': ['张三', '李四'] 我们只需要将原来的数组赋值给一个字典来接收就好了。 (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |