glom模組使用(二)

2022-05-30 01:06:13 字數 3042 閱讀 9655

經過諮詢庫的作者,在最後留的那個問題的準確解法如下:

import

glom

target =,,]

}}spec =

print

glom.glom(target, spec)

####

非常棒,準確來說就是得靈活運用 coalesce 方法啊,不能太死板。非常 pythonic。 另附**,作者有個很搞笑 little four hair , 哈哈哈哈 issue 位址

文件位址

pip install glom
glom,官方的說法是用 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 = }}

print glom(data, '

a.b.c

') #

d

看起來還是很優雅, 很 pythonic。

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

']))

print

glom(target, spec)

#['earth', 'jupiter']

是不是很簡單。那麼現在新需求又來了,太空飛行員想得到下面這個資料裡面的行星的衛星的數:

target = ,

]}}

#

自定義的格式

spec =

print

glom(target, spec)

#

coalesce 是 glom 定義的一種結構,允許我們對於 spec 中的子 spec 進行進一步的處理,你只要在子 spec 中將可能存在的值定義好就行了,聽起來有點繞,現在來梳理一下。

spec = 

#以這個為例,這裡面的system.planets就是個子spec

target = , ],}}

spec =

print

glom(target, spec)

#

target = ,

]}}spec =

print

glom(target, spec)

#

可以看到,依然可以使用相同的 spec 來解析不同的目標資料。 有意思的是,你可以在 target 裡面同時寫入 plantes 和 dwarf_plants 資料試試看,會返回什麼資料。 【這裡應該是個惰性的匹配,只要匹配到乙個,後面的就不再去匹配了

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引數是定義模...