Ошибка открытия файла в H5PY (подпись файла не найдена)

Я использовал следующий бит кода, чтобы открыть некоторые файлы HDF5, созданные в MATLAB, в python с использованием H5PY:

import h5py as h5
data='dataset.mat'
f=h5.File(data, 'r')

Однако я получаю следующую ошибку:

OSError: Unable to open file (File signature not found)

Я проверил, что файлы, которые я пытаюсь открыть, являются MAT файлами версии 7.3 и являются форматом HDF5. На самом деле я использовал H5PY для открытия тех же файлов ранее. Я подтвердил, что файлы существуют и доступны, поэтому я не уверен, откуда происходит ошибка. Любой совет будет очень благодарен, заблаговременно:)

Ответ 1

Обычно сообщение File signature not found указывает либо:

1. Ваш файл поврежден.

... это то, что я думаю, скорее всего. Вы сказали, что раньше открывали файлы. Возможно, вы забыли закрыть свой файл-дескриптор, который может повредить файл. Попробуйте проверить файл с помощью утилиты HDF5 h5debug (доступной в командной строке, если вы установили hdf5 lib на свою ОС, проверьте с помощью dpkg -s libhdf5-dev в Linux).

2. Файл не находится в формате HDF5.

Это известная причина для сообщения об ошибке. Но так как вы сказали, что убедитесь, что это так, и вы открыли файлы раньше, я даю это только для справки для других, которые могут наткнуться здесь:

Начиная с декабря 2015 года (начиная с версии 7.3), файлы Matlab используют формат на основе HDF5 в своих MAT-File Level 5 Containers (подробнее doc). Более ранние версии MAT файлов (v4 (Уровень 1.0), v6 и v7 до 7.2) поддерживаются и могут быть прочитаны с помощью библиотеки scipy:

import scipy.io
f = scipy.io.loadmat('dataset.mat')

В противном случае вы можете попробовать другие методы и посмотреть, сохраняется ли ошибка:

PyTables является альтернативой h5py и может быть найден здесь.

import tables
file = tables.openFile('test.mat')

Python MATLAB Engine - это альтернатива чтению файлов MAT, если у вас установлен Matlab. Документация находится здесь: API MATLAB Engine для Python.

import matlab.engine
mat = matlab.engine.start_matlab()
f = mat.load("dataset.mat", nargout=1)

Ответ 2

Я столкнулся с той же проблемой с моим файлом.h5. И проблема в том, что я не загружал файл.h5 правильно.

Я делал имя файла. h5-> right_click-> сохранить ссылку как, которая не загружала файл правильно (или может быть файл поврежден). Вместо этого я загрузил файл как: установил флажок с filename.h5 и нажал на загрузку, после чего мой код работал.

Может быть, это поможет тому, кто совершает ту же ошибку.