經過諮詢庫的作者,在最後留的那個問題的準確解法如下:
import非常棒,準確來說就是得靈活運用 coalesce 方法啊,不能太死板。非常 pythonic。 另附**,作者有個很搞笑 little four hair , 哈哈哈哈 issue 位址glom
target =,,]
}}spec =
glom.glom(target, spec)
####
文件位址
pip install glomglom,官方的說法是用 pythonic 的方式來處理內嵌的資料。對於現實世界中的資料處理更加給力,現實世界中的資料,我的理解就是 ajax 越來越流行了,處理這類資料會越來越頻繁。有如下特點:
下面的指令碼包匯入
from glom import glom下面的 data 就是個簡單的巢狀資料,一般都可以用下面幾種方法進行處理
data = }}但是當我們的資料改變成下面的這樣時:data['a
']['
b']['c'
]data.get('a
').get('
b').get('c'
)data.get('a
', {}).get('
b',{}).get('
c')
data2 = }會報錯,而且由於是巢狀資料,從錯誤信data2['a
']['
b']['c'
]traceback (most recent call last):
...typeerror:
'nonetype
' object has no attribute '
__getitem__
'
息裡我們只知道有個 none 值,但是到底誰是呢,是 a,是 b 呢,反正肯定不是我們的朋友小哪吒。
那麼 glom 怎麼處理上面的資料呢? 如其所言,路徑式:
data = }}看起來還是很優雅, 很 pythonic。print glom(data, '
a.b.c
') #
d
data2 = }錯誤資訊如下:glom(data2,
'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'
",)
上面的是原標題,我的理解是不僅僅獲取資料,還有別的呢。 首先,介紹兩個基本的術語
target 目標資料,可以是字典,列表,或其他任意的物件現在讓我們跟隨太空飛行員的腳步,探索太陽系吧。spec 我們想要的輸出格式 【specifications】, 定義你自己所需要的格式
target = }}#這個格式就是需要個字段值,所以輸出的就是個字段值
spec = '
galaxy.system.planet
'glom(target, spec)
#'jupyter'
target = , ]}}
glom(target, ('是不是很簡單。那麼現在新需求又來了,太空飛行員想得到下面這個資料裡面的行星的衛星的數:system.planets
', ['
name
']))
glom(target, spec)
#['earth', 'jupiter']
target = ,]}}
#coalesce 是 glom 定義的一種結構,允許我們對於 spec 中的子 spec 進行進一步的處理,你只要在子 spec 中將可能存在的值定義好就行了,聽起來有點繞,現在來梳理一下。自定義的格式
spec =
glom(target, spec)
#
spec =#以這個為例,這裡面的system.planets就是個子spec
target = , ],}}spec =
glom(target, spec)
#
target = ,可以看到,依然可以使用相同的 spec 來解析不同的目標資料。 有意思的是,你可以在 target 裡面同時寫入 plantes 和 dwarf_plants 資料試試看,會返回什麼資料。 【這裡應該是個惰性的匹配,只要匹配到乙個,後面的就不再去匹配了]}}spec =
glom(target, spec)
#
coalesce傳了多個key,總有乙個命中的
。真正的原生 python 在 glom 裡面,你可以傳值給 python 裡面的任意的函式 舉例:
target = ,]}}print glom(target, )
#
target =,,]現在,我想返回的資料格式為: 一開始我以為可以這麼用:}}
spec =但是不行,這樣會報錯。
**:
glom模組的使用 二
上次我們說到golm的簡單應用,glom模組的使用 一 這次我們繼續對glom的其他操作進行學習。literal 用法 class glom.literal value 這個方法的功能主要是新增自定義的鍵值。例如 from glom import glom,literaltarget spec sp...
glom模組的使用 二
上次我們說到golm的簡單應用這次我們繼續帶結構化資料的其他操作進行學習。用法 class glom.literal value 這個方法的功能主要是新增自定義的鍵值。例如 from glom import glom,literal target spec spec2 print glom targ...
glom模組的使用(一)
glom模組的使用 簡單說下glom模組主要是處理結構化資料用的,安裝pip install glom即可,下面就glom的方法引數做例子講解。和模組同名的glom方法使用方法 glom target,spec,kwargs target引數是結構化資料,一般是json巢狀型別。spec引數是定義模...