加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

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': ['张三', '李四']
       我们只需要将原来的数组赋值给一个字典来接收就好了。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读