Как читать файлы 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')