Как читать файлы HDF5 в Python

Я пытаюсь прочитать данные из файла hdf5 в Python. Я могу прочитать файл hdf5 с помощью h5py, но я не могу понять, как получить доступ к данным в файле.

Мой код

import h5py    
import numpy as np    
f1 = h5py.File(file_name,'r+')    

Это работает, и файл читается. Но как я могу получить доступ к данным внутри файлового объекта f1?

Ответ 1

Читать HDF5

import h5py
filename = 'file.hdf5'

with h5py.File(filename, 'r') as f:
    # List all groups
    print("Keys: %s" % f.keys())
    a_group_key = list(f.keys())[0]

    # Get the data
    data = list(f[a_group_key])

Написать HDF5

#!/usr/bin/env python
import h5py

# Create random data
import numpy as np
data_matrix = np.random.uniform(-1, 1, size=(10, 3))

# Write data to HDF5
with h5py.File('file.hdf5', 'w') as data_file:
    data_file.create_dataset('group_name', data=data_matrix)

См. h5py документы для получения дополнительной информации.

Альтернативы

Для вашего приложения может быть важно следующее:

  • Поддержка другими языками программирования
  • Производительность чтения/записи
  • Компактность (размер файла)

Смотрите также: Сравнение форматов сериализации данных

Если вы ищете способ создания файлов конфигурации, вы можете прочитать мою короткую статью Файлы конфигурации в Python

Ответ 2

вы можете использовать Pandas.

import pandas as pd
pd.read_hdf(filename,key)

Ответ 3

Чтение файла

import h5py

f = h5py.File(file_name, mode)

Изучите структуру файла, напечатав, какие группы HDF5 присутствуют

for key in f.keys():
    print(key) #Names of the groups in HDF5 file.

Извлечение данных

#Get the HDF5 group
group = f[key]

#Checkout what keys are inside that group.
for key in group.keys():
    print(key)

data = group[some_key_inside_the_group].value
#Do whatever you want with data

#After you are done
f.close()

Ответ 4

Чтобы прочитать содержимое файла .hdf5 в виде массива, вы можете сделать следующее:

> import numpy as np 
> myarray = np.fromfile('file.hdf5', dtype=float)
> print(myarray)

Ответ 5

Вот простая функция, которую я только что написал, которая читает файл .hdf5, сгенерированный функцией save_weights в keras, и возвращает dict с именами слоев и весами:

def read_hdf5(path):

    weights = {}

    keys = []
    with h5py.File(path, 'r') as f: # open file
        f.visit(keys.append) # append all keys to list
        for key in keys:
            if ':' in key: # contains data if ':' in key
                print(f[key].name)
                weights[f[key].name] = f[key].value
    return weights

https://gist.github.com/Attila94/fb917e03b04035f3737cc8860d9e9f9b.

Не проверил это полностью, но сделал работу для меня.

Ответ 6

Что вам нужно сделать, так это создать набор данных. Если вы посмотрите на руководство по быстрому старту, это покажет вам, что вам нужно использовать файл-объект, чтобы создать набор данных. Итак, f.create_dataset, а затем вы можете прочитать данные. Это объясняется в docs.

Ответ 7

Используйте приведенный ниже код для чтения данных и преобразования их в массив

import h5py
f1 = h5py.File('data_1.h5', 'r')
list(f1.keys())
X1 = f1['x']
y1=f1['y']
df1= np.array(X1.value)
dfy1= np.array(y1.value)
print (df1.shape)
print (dfy1.shape)

Ответ 8

from keras.models import load_model 

h= load_model('FILE_NAME.h5')