glom
以Python方式重构数据
真实应用中的数据是复杂的,数据会嵌套。对象内嵌套对象,对象列表内嵌套对象。
glom是一种处理真实世界数据的新型强大方法,具有以下特点:
- 基于路径访问嵌套数据结构
- 可读、有意义的错误消息
- 使用轻量级、Pythonic的规范进行声明式数据转换
- 内置数据探索和调试功能
所有这些功能和更多,都可以通过一个完整文档的纯Python包获得,在Python 3.7+和PyPy3上经过测试。安装非常简单:
pip install glom
安装glom时,你还会获得glom命令行界面,让你可以在控制台进行实验,但不局限于shell脚本:
用法:glom [标志] [规范 [目标]]
glom库的命令行界面,提供嵌套数据访问和数据重构功能,具有Python的强大功能。
标志:
--help / -h 显示此帮助信息并退出
--target-file 目标文件 目标数据源的路径(可选)
--target-format 目标格式 源数据的格式(json、python、toml或yaml)(默认为'json')
--spec-file 规范文件 glom规范定义的路径(可选)
--spec-format 规范格式 glom规范定义的格式(json、python、python-full)(默认为'python')
--indent 缩进 结果的缩进空格数,0表示禁用美化打印(默认为2)
--debug 交互式调试出现的任何错误
--inspect 交互式探索数据
在命令行上可以执行的任何操作都可以轻松转换为Python代码,因此当复杂性开始增加时,你始终有前进的路径。
示例
不使用glom
>>> data = {'a': {'b': {'c': 'd'}}}
>>> data['a']['b']['c']
'd'
>>> data2 = {'a': {'b': None}}
>>> data2['a']['b']['c']
Traceback (most recent call last):
...
TypeError: 'NoneType' object is not subscriptable
使用glom
>>> glom(data, 'a.b.c')
'd'
>>> glom(data2, 'a.b.c')
Traceback (most recent call last):
...
PathAccessError: could not access 'c', index 2 in path Path('a', 'b', 'c'), got error: ...
了解更多
如果这些看起来很有趣,请继续探索glom:
以上所有链接都充满了示例,但如果你发现文档或glom本身有任何不足之处,请提交问题!
同时,请记住:当你遇到嵌套数据时,就用glom吧!☄️