Python: h5py gives OSError: Can't read data (inflate() failed) even though it's opened it before

Python: h5py gives OSError: Can't read data (inflate() failed) even though it's opened it before

Python 3.5。我在一个目录中有几百个 .mat mat 文件(7.3 版)。我正在遍历所有这些以提取数据的两个不同部分。我遍历并获得并获得第一批完全没有问题但是当我再次做完全相同的事情时我只提取了数据的不同部分我得到以下错误:

Traceback (most recent call last):
  File "v73_test.py", line 43, in <module>
    mrfs_data = extract.convert1simProteinComCountsIntoDataFrame(path2mats)
  File "/home/oli/Downloads/PhD/wc/mg/version_73_stuff/functions_for_joshuas_matFiles/extract_matFile_data_v73.py", line 586, in convert1simProteinComCountsIntoDataFrame
    raw_data = getMatureProteinComplexs(path2mats, state_no)
  File "/home/oli/Downloads/PhD/wc/mg/version_73_stuff/functions_for_joshuas_matFiles/extract_matFile_data_v73.py", line 53, in getMatureProteinComplexs
    if len(np.array(state_file['ProteinComplex']['counts']).shape) == 3:
  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 "/home/oli/virtualenvs/standard_python3.5/lib/python3.5/site-packages/h5py/_hl/dataset.py", line 696, in __array__
    self.read_direct(arr)
  File "/home/oli/virtualenvs/standard_python3.5/lib/python3.5/site-packages/h5py/_hl/dataset.py", line 657, in read_direct
    self.id.read(mspace, fspace, dest, dxpl=self._dxpl)
  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/h5d.pyx", line 181, in h5py.h5d.DatasetID.read
  File "h5py/_proxy.pyx", line 130, in h5py._proxy.dset_rw
  File "h5py/_proxy.pyx", line 84, in h5py._proxy.H5PY_H5Dread
OSError: Can't read data (inflate() failed)

所以文件肯定在那里并且可以访问所以我唯一能想到的是数据已损坏但如果是这样我肯定无法从中提取任何数据?

我在这里回答了我自己的问题,因为网上没有太多关于这个错误的信息,我学到了一些东西,所以也许它会对其他人有所帮助。

所以我意识到数据实际上已损坏。我认为如果文件已损坏,那么您将无法从中提取任何内容,但事实证明,在这种情况下这不是真的,您无法访问的唯一位是已损坏的特定位。根据过去对其他版本的 .mat 文件的经验,这不是我所期望的,但现在我想这个版本实际上是什么,它似乎很明显。

Python 3.6。我遇到了类似的问题,因此我可以读取输出数据(对于 2D SHETRAN 水文模型中的给定网格单元),例如,直到第 24 个时间步长:

 f['VARIABLES']['  6 srf_dep']['value'][0,0,24]

 Out[272]: -1.0

但是到了第 240 个时间步,我得到了同样的错误:

['VARIABLES']['  6 srf_dep']['value'][0,0,240]


 Traceback (most recent call last):

  File "<ipython-input-273-1f12011309c3>", line 1, in <module>
    f['VARIABLES']['  6 srf_dep']['value'][0,0,240]

  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:\Anaconda3\lib\site-packages\h5py\_hl\dataset.py", line 496, in __getitem__
    self.id.read(mspace, fspace, arr, mtype, dxpl=self._dxpl)

  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\h5d.pyx", line 181, in h5py.h5d.DatasetID.read

  File "h5py\_proxy.pyx", line 130, in h5py._proxy.dset_rw

  File "h5py\_proxy.pyx", line 84, in h5py._proxy.H5PY_H5Dread

 OSError: Can't read data (inflate() failed)

我通过删除有问题的 H5 文件解决了这个问题,再次重新打开我的 IDE 和 运行。感谢您的解决方案。