Как проверить файл.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)
Другие вопросы по тегам