python中glom模块怎样安装与使用?
Admin 2021-05-18 群英技术资讯 1109 次浏览
这篇文章主要给大家介绍的关于python glom模块的使用,小编觉得蛮有用的,因此分享给大家作参考,感兴趣的朋友可以参考学习,下面我们就一起来看看吧。
glom模块,是 Python 处理数据的一个小模块,它具有如下特点:
看起来比较抽象,对不对?下面我们用实例来给大家演示一下。
作为 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 简直是神器!
刚才简单的例子,让大家对 glom 有了直观的认识,接下来我们看看 glom 的 glom 方法的定义:
glom(target, spec, **kwargs)
我们看看参数的含义:
下面我们来使用这个方法。
先看一个例子。我们有一个 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': ['张三', '李四']
我们只需要将原来的数组赋值给一个字典来接收就好了。
假如我现在有两组数据,我要取出 name 的值:
data_1 = {"school": {"student": [{"name": "张三"}, {"name": "李四"}]}}
data_2 = {"school": {"teacher": [{"name": "王老师"}, {"name": "赵老师"}]}}
spec_1 = {"name": ("school.student", ["name"])}
spec_2 = {"name": ("school.teacher", ["name"])}
print(glom(data_1, spec_1)) # {'name': ['张三', '李四']}
print(glom(data_2, spec_2)) # {'name': ['王老师', '赵老师']}
我们通常是这么写,对吗?假如我们有好多组数据,每组都是类似的取法呢?这时候我们就会想办法避免一个个重复写 N 行参数了,我们可以使用 Coalesce 方法:
data_1 = {"school": {"student": [{"name": "张三"}, {"name": "李四"}]}}
data_2 = {"school": {"teacher": [{"name": "王老师"}, {"name": "赵老师"}]}}
spec = {"name": (Coalesce("school.student", "school.teacher"), ["name"])}
print(glom(data_1, spec)) # {'name': ['张三', '李四']}
print(glom(data_2, spec)) # {'name': ['王老师', '赵老师']}
我们可以用 Coalesce 把多个需求聚合起来,然后针对同一个 spec 来取值就行了。
下面再来一个大杀器――取值计算。glom 还可以对取值进行简单计算,我们来看例子:
data = {"school": {"student": [{"name": "张三", "age": 8}, {"name": "李四", "age": 10}]}}
spec = {"sum_age": ("school.student", ["age"], sum)}
print(glom(data, spec)) # {'sum_age': 18}
介绍了这么多,大家应该知道 glom 的厉害之处了吧,据说很多大佬都喜欢使用呢。其实它还有很多其他的实用功能有待大家去发掘,这里就不一一介绍了。
关于python glom模块的使用就介绍到这,希望大家阅读完这篇文章之后大有收获,更多python glom模块功能大家可以关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了pyecharts绘制各种数据可视化图表案例并附效果和代码,文章围绕主题展开详细的内容介绍,感兴趣的小伙伴可以参考一下
在本篇文章里小编给大家整理了一篇关于Python 解决空列表.append() 输出为None的问题的相关内容,有兴趣的朋友们可以学习下。
JSON用来存储和交换文本信息,比xml更小/更快/更易解析,下面这篇文章主要给大家介绍了关于python向json中追加数据的两种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
这篇文章给大家分享的是如何使用python实现文件批量重命名的方法,在我们需要对多文件重新命名的时候,小编觉得这个方法比较实用,需要的朋友可以参考,接下来一起跟随小编看看吧。
这篇文章介绍了Python常用Web框架Django、Flask与Tornado,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008