HDF5 в python: чтение файла - PullRequest
1 голос
/ 11 апреля 2020

Я использовал это раньше без проблем, и оно внезапно не работает:

import scipy.io
import numpy as np
import h5py
f = h5py.File('Dv25.mat','r')
D = f["Dv25"]

Вывод:

Traceback (most recent call last):

  File "C:/Users/jonathan/Documents/Forskning/P1/Datab/Felles/Matart/Felles/datab.py", line 5, in 
<module>
    D = f["Dv25"]
  File "h5py\_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py\_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "C:\Program Files\Python38\lib\site-packages\h5py\_hl\group.py", line 264, in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
  File "h5py\_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py\_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "h5py\h5o.pyx", line 190, in h5py.h5o.open
KeyError: "Unable to open object (object 'Dv25' doesn't exist)"

Однако, введя f, вы получите:

>>> f
<HDF5 file "Dv25.mat" (mode r)>

и обмен Dv25.mat на Dv25 или использование 'или' не помогает.

В чем причина этой проблемы и как я могу ее исправить? Очевидно, этот файл "там"

Спасибо !!!

Best, J

1 Ответ

0 голосов
/ 11 апреля 2020

Некоторые основы h5py / HDF5:
f - это файловый объект.
f['Dv25'] - это ссылка на объект (либо группа, либо набор данных). В данном случае это узел с именем «Dv25» на уровне root ('/'). Очевидно, что объект с таким именем не существует в вашем файле.
Используйте f.keys(), чтобы получить объекты на уровне root. Это вернет вид объектов уровня root; это могут быть группы или наборы данных. Вы можете перебирать их, чтобы получить имена. Для печати используйте это l oop: (которое должно идентифицировать имена уровней root):

for i in f.keys():  
    print (i)

Примечание: расширения .mat обычно приходят из Matlab, у которого есть возможность записывать файлы в формате HDF5 , Убедитесь, что это написано в этом формате.

...