Как проверить файл.h5 в Python
Как узнать, какие переменные, наборы данных и т. Д. Данный файл.h5 имеет в Python?
Я могу прочитать файл, запустив этот
import h5py
f = h5py.File(filename, 'r')
Как мне теперь узнать, какие переменные есть в моем файле.h5?
Бег f.keys()
выводит неинформативный
KeysView(<HDF5 file filename (mode r)>)
В Matlab я просто вызываю h5disp(имя файла), но хотел бы знать, как это сделать в Python
4 ответа
Ты пробовал?
print(list(f.keys()))
Это должно дать вам всю группу внутри вашего файла hdf5. Вы можете сделать то же самое для наборов данных, если f - группа.
Может быть, излишним, но у меня было это и может быть полезно для кого-то:
from __future__ import print_function
def scan_hdf5(path, recursive=True, tab_step=2):
def scan_node(g, tabs=0):
print(' ' * tabs, g.name)
for k, v in g.items():
if isinstance(v, h5.Dataset):
print(' ' * tabs + ' ' * tab_step + ' -', v.name)
elif isinstance(v, h5.Group) and recursive:
scan_node(v, tabs=tabs + tab_step)
with h5.File(path, 'r') as f:
scan_node(f)
И простой ввод:
>>> scan_hdf5('/tmp/dummy.h5')
/
- /d1
/g1
- /g1/d2
- /g1/d3
/g2
- /g2/d4
/g2/g3
- /g2/g3/d5
Или альтернативная версия, которая возвращает элементы в более удобном для использования виде:
def scan_hdf52(path, recursive=True, tab_step=2):
def scan_node(g, tabs=0):
elems = []
for k, v in g.items():
if isinstance(v, h5.Dataset):
elems.append(v.name)
elif isinstance(v, h5.Group) and recursive:
elems.append((v.name, scan_node(v, tabs=tabs + tab_step)))
return elems
with h5.File(path, 'r') as f:
return scan_node(f)
с возвратами:
>>> scan_hdf5_2('/tmp/dummy.h5')
[u'/d1',
(u'/g1', [u'/g1/d2', u'/g1/d3']),
(u'/g2', [u'/g2/d4', (u'/g2/g3', [u'/g2/g3/d5'])])]
Я столкнулся с этим вопросом, пытаясь выяснить способ отображения каждого отдельного узла в файле h5, чтобы иметь возможность извлекать только нужные узлы с соответствующими наборами данных.
Думаю, это очень простой, но понятный (для меня) фрагмент:
h5 = h5py.File(filename, 'r')
def hierarchy(d):
for item in d:
if ' 0 member' in str(d[item]):
print(d[item].name, ['empty group'])
if isinstance(d[item], h5py.Group):
hierarchy(d[item])
else: #Dataset
print(d[item].name, ['dataset'])
hierarchy(h5)
Следовательно, я буду использовать это в приложении с графическим интерфейсом пользователя, я собираюсь включить выбор только отмеченных элементов "набор данных".
Это распечатывает структуру данных в иерархии как групп, так и наборов данных, содержащихся в файле h5.
import h5py
def printGroup(group):
for i in list(group. keys()):
try:
if list(group[i].keys()):
print(f"{group.name}/{i}/")
printGroup(group[i])
except:
print(group[i].name, group[i].dtype, group[i].shape)
print("\n\nData File Structure")
f = h5py.File('filePath.h5', 'r')
printGroup(f)