2 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
只需迭代鍵列表:
with h5py.File(data_path, 'r') as f:
alist = []
ls = list(f.keys())
print('List of datasets: \n', ls)
for key in ls:
group = f.get(key)
dataset = group.get(datasetname)[:]
print('Shape of dataset: \n', dataset.shape)
alist.append(dataset)
# don't need f.close() in a with
沒有allgroups; 有 iter 和 visit 方法,但它們最終做同樣的事情 - 對(duì)于文件中的每個(gè)組,獲取所需的數(shù)據(jù)集。 h5py文檔應(yīng)該是完整的,沒有隱藏的方法。這visit是遞歸的,類似于用于訪問目錄和文件的 Python OS 功能。
在h5py文件和組中表現(xiàn)得像 Python dicts。它是行為類似于numpy數(shù)組的數(shù)據(jù)集。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您知道您將始終擁有此數(shù)據(jù)模式,則可以使用鍵(如上一個(gè)答案所示)。這意味著只有根級(jí)別的組,而數(shù)據(jù)集是每個(gè)組下的唯一對(duì)象。當(dāng)您不知道文件的確切內(nèi)容時(shí),“訪問者”功能非常方便。
有 2 個(gè)訪問者函數(shù)。他們是visit()和visititems()。每個(gè)遞歸地遍歷對(duì)象樹,為每個(gè)對(duì)象調(diào)用訪問者函數(shù)。唯一的區(qū)別是可調(diào)用函數(shù)visit接收 1 個(gè)值:name,而visititems接收 2 個(gè)值:name和node(一個(gè) h5py 對(duì)象)。名稱就是一個(gè)對(duì)象的名稱,而不是完整的路徑名。我更喜歡visititems有兩個(gè)原因:1) 擁有節(jié)點(diǎn)對(duì)象允許您對(duì)對(duì)象類型進(jìn)行測(cè)試(如下所示),以及 2) 確定路徑名需要您知道路徑或使用對(duì)象的名稱屬性來獲取它。
下面的示例創(chuàng)建一個(gè)簡單的 HDF5 文件,創(chuàng)建一些組和數(shù)據(jù)集,然后關(guān)閉該文件。然后它以讀取模式重新打開并用于visititems()遍歷文件對(duì)象樹。(注意:訪問者函數(shù)可以有任何名稱并且可以與任何對(duì)象一起使用。它從文件結(jié)構(gòu)中的那個(gè)點(diǎn)開始遞歸遍歷。)
f.close()此外,您在使用構(gòu)造時(shí)不需要with / as:。
import h5py
import numpy as np
def visit_func(name, node) :
print ('Full object pathname is:', node.name)
if isinstance(node, h5py.Group) :
print ('Object:', name, 'is a Group\n')
elif isinstance(node, h5py.Dataset) :
print ('Object:', name, 'is a Dataset\n')
else :
print ('Object:', name, 'is an unknown type\n')
arr = np.arange(100).reshape(10,10)
with h5py.File('SO_63315196.h5', 'w') as h5w:
for cnt in range(3):
grp = h5w.create_group('group_'+str(cnt))
grp.create_dataset('data_'+str(cnt),data=arr)
with h5py.File('SO_63315196.h5', 'r') as h5r:
h5r.visititems(visit_func)
添加回答
舉報(bào)