代码之家  ›  专栏  ›  技术社区  ›  ojunk

Python:h5py给出了一个错误:无法读取数据(inflate()失败),即使之前已经打开了它

  •  6
  • ojunk  · 技术社区  · 8 年前

    Python 3.5。我有几百个。目录中的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)
    

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

    2 回复  |  直到 8 年前
        1
  •  9
  •   ojunk    7 年前

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

    因此,我意识到数据实际上已经损坏。我认为如果一个文件被破坏了,那么你将无法从中提取任何东西,但事实证明,在这种情况下,这不是真的,你唯一不能访问的是被破坏的特定位。基于对其他版本的的经验,这不是我所期望的。但是现在我想这个版本实际上是什么,看起来有点明显。

        2
  •  2
  •   DarylVanDam    6 年前

    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并再次运行来解决这个问题。谢谢你的解决方案。