IOError: не удается прочитать данные (не удается открыть каталог) — отсутствует фильтр сжатия gzip

Я никогда раньше не работал с файлами HDF5, и для начала я получил несколько примеров файлов. Я проверил все основы работы с h5py, просматривая различные группы в этих файлах, их имена, ключи, значения и так далее. Все работает нормально, пока я не хочу посмотреть наборы данных, которые сохраняются в группах. Я получаю их .shape и .dtype, но когда я пытаюсь получить доступ к случайному значению путем индексации (например, grp["dset"][0]), я получаю следующую ошибку:

IOError                                   Traceback (most recent call last)
<ipython-input-45-509cebb66565> in <module>()
      1 print geno["matrix"].shape
      2 print geno["matrix"].dtype
----> 3 geno["matrix"][0]

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/dataset.pyc in __getitem__(self, args)
    443         mspace = h5s.create_simple(mshape)
    444         fspace = selection._id
--> 445         self.id.read(mspace, fspace, arr, mtype)
    446
    447         # Patch up the output for NumPy

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/h5d.so in h5py.h5d.DatasetID.read (h5py/h5d.c:2782)()

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_proxy.so in h5py._proxy.dset_rw (h5py/_proxy.c:1709)()

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_proxy.so in h5py._proxy.H5PY_H5Dread (h5py/_proxy.c:1379)()

IOError: Can't read data (Can't open directory)

Я разместил эту проблему в группе h5py Google, где она была предположил, что в наборе данных может быть фильтр, который я не установил. Но файл HDF5 был создан с использованием только сжатия gzip, который, насколько я понял, должен быть переносимым стандартом.
Кто-нибудь знает, что я мог здесь упустить? Я даже нигде не могу найти описание этой ошибки или подобных проблем, а файл, включая проблемный набор данных, можно легко открыть с помощью программного обеспечения HDFView.

Изменить
По-видимому, эта ошибка возникает из-за того, что по какой-то причине фильтр сжатия gzip недоступен в моей системе. Если я попытаюсь создать пример файла со сжатием gzip, произойдет следующее:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-33-dd7b9e3b6314> in <module>()
      1 grp = f.create_group("subgroup")
----> 2 grp_dset = grp.create_dataset("dataset", (50,), dtype="uint8", chunks=True, compression="gzip")

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/group.pyc in create_dataset(self, name, shape, dtype, data, **kwds)
     92         """
     93 
---> 94         dsid = dataset.make_new_dset(self, shape, dtype, data, **kwds)
     95         dset = dataset.Dataset(dsid)
     96         if name is not None:

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/dataset.pyc in make_new_dset(parent, shape, dtype, data, chunks, compression, shuffle, fletcher32, maxshape, compression_opts, fillvalue, scaleoffset, track_times)
     97 
     98     dcpl = filters.generate_dcpl(shape, dtype, chunks, compression, compression_opts,
---> 99                   shuffle, fletcher32, maxshape, scaleoffset)
    100 
    101     if fillvalue is not None:

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/filters.pyc in generate_dcpl(shape, dtype, chunks, compression, compression_opts, shuffle, fletcher32, maxshape, scaleoffset)
    101 
    102         if compression not in encode:
--> 103             raise ValueError('Compression filter "%s" is unavailable' % compression)
    104 
    105         if compression == 'gzip':

ValueError: Compression filter "gzip" is unavailable

У кого-нибудь есть опыт в этом? Установка библиотеки HDF5, а также пакета h5py не пошла не так...


person Lilith-Elina    schedule 10.10.2014    source источник
comment
Для меня это выглядит как проблема с неправильным путем/разрешениями.   -  person aruisdante    schedule 10.10.2014
comment
Есть ли dset среди названий наборов данных, перечисленных grp.keys()? У вас есть образец файла, который вы можете разместить где-нибудь, чтобы мы могли его увидеть? Также рассмотрите возможность выполнения h5ls thefile в командной строке и посмотрите, что это покажет.   -  person John Zwinck    schedule 10.10.2014
comment
Пожалуйста, не могли бы вы опубликовать вывод print geno["matrix"]?   -  person Yossarian    schedule 11.10.2014
comment
@JohnZwinck Да, набор данных отображается в ключах групп. Команда h5ls выводит список двух групп в файле. @Yossarian Вывод только print geno["matrix"] равен <HDF5 dataset "matrix": shape (1008, 11623), type "|u1">.   -  person Lilith-Elina    schedule 13.10.2014
comment
Это кажется довольно странным. Есть ли шанс, что вы можете загрузить пример файла куда-нибудь, который демонстрирует проблему, чтобы другие люди могли ее попробовать? В идеале файл не супер-огромного размера.   -  person John Zwinck    schedule 13.10.2014
comment
Я попытался создать файл примера, но не смог (см. мой отредактированный вопрос). Видимо вся проблема в том, что у меня отсутствует фильтр сжатия gzip, но я не понимаю, как такое могло произойти.   -  person Lilith-Elina    schedule 13.10.2014
comment
У меня точно такая же проблема. Вы решили это в конце концов?   -  person Stefan Shi    schedule 11.11.2020
comment
Я думаю, что это было решено Анакондой, изменив что-то в пакете h5py...   -  person Lilith-Elina    schedule 12.11.2020


Ответы (5)


Не могу просто прокомментировать - слишком низкая репутация.

У меня была такая же проблема, просто запустил «conda update anaconda», и проблема исчезла.

person Fermion Portal    schedule 09.12.2014
comment
Это имеет смысл. В группе h5py Google мы поняли, что с версией Anaconda h5py что-то не так, и там это исправили. Спасибо, что напомнили закрыть тему и здесь! - person Lilith-Elina; 12.12.2014

У меня такая же проблема. Я решил это с

import tables

и теперь работает нормально

person Andrii Ladyhin    schedule 31.12.2017

У меня была аналогичная проблема,

$ python3 -c 'import h5py; f=h5py.File("file.h5"); d=f["FVC"][:,:]'                                                               

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper (/home/ilan/minonda/conda-bld/work/h5py/_objects.c:2696)
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper (/home/ilan/minonda/conda-bld/work/h5py/_objects.c:2654)
  File "/home/pinaultf/system/anaconda2/envs/deveg-dev/lib/python3.5/site-packages/h5py/_hl/dataset.py", line 482, in __getitem__
    self.id.read(mspace, fspace, arr, mtype, dxpl=self._dxpl)
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper (/home/ilan/minonda/conda-bld/work/h5py/_objects.c:2696)
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper (/home/ilan/minonda/conda-bld/work/h5py/_objects.c:2654)
  File "h5py/h5d.pyx", line 181, in h5py.h5d.DatasetID.read (/home/ilan/minonda/conda-bld/work/h5py/h5d.c:3240)
  File "h5py/_proxy.pyx", line 130, in h5py._proxy.dset_rw (/home/ilan/minonda/conda-bld/work/h5py/_proxy.c:1869)
  File "h5py/_proxy.pyx", line 84, in h5py._proxy.H5PY_H5Dread (/home/ilan/minonda/conda-bld/work/h5py/_proxy.c:1517)
OSError: Can't read data (Can't open directory)

У меня была эта проблема в одной виртуальной среде, а не в другой, даже если версия h5py была одинаковой (2.6.0).

Я решил эту проблему с помощью:

$ pip uninstall h5py
$ pip install h5py
person Florian    schedule 21.12.2016

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

import hdf5plugin

прежде чем использовать библиотеку h5py. Вам не нужно использовать библиотеку hdf5plugin напрямую, вы просто импортируете ее. В зависимости от того, какой плагин использует файл, могут работать разные импорты — было бы полезно, если бы это сообщение об ошибке было немного более описательным.

person lacker    schedule 12.05.2021

Я переключил python 3.6 на python 3.8 и «импорт таблиц», решил.

person Peigen Liu    schedule 01.04.2021