python h5py文件读取" OSError:无法打开文件(错误的超级块版本号)"

时间:2018-03-20 13:52:55

标签: python linux windows hdf5 h5py

简短说明

我遇到一个问题,即在Windows机器上编写了hdf5文件,无法在Linux机器上打开。错误消息是" OSError:无法打开文件(错误的超级块版本号)"。 (因此,这个问题可能与h5py根本无关,而是在python文件中打开一般的linux / windows兼容性问题。)

详细说明

在Windows和Linux上都使用了包含以下软件包的python虚拟环境:

  • 瓶-0.12.2
  • 合剂的RESTful-0.3.6
  • Jinja2-2.10
  • MarkupSafe-1.0
  • WERKZEUG-0.14.1
  • aniso8601-3.0.0
  • 点击6.7
  • h5py-2.7.1
  • h5py缓存-1.0
  • itsdangerous-0.24
  • 锁文件-0.12.2
  • numpy的-1.14.0
  • pytz-2018.3
  • 六1.11.0

在Windows上,可以毫无问题地打开和读取文件,但在Linux上它无法引发OSError。只需启动一个新的python会话并输入以下内容即可:

  

导入h5py

     

f1 = h5py.File(" myfile.hdf5"," r")

完整错误:

  

追踪(最近一次呼叫最后一次):

     

文件" stdin",第1行,在模块

中      

文件" /usr/local/lib/python3.6/site-packages/h5py/_hl/files.py" ;,第312行,在_ _ init_ _

     
fid = make_fid(name, mode, userblock_size, fapl, swmr=swmr)
  
     

文件" /usr/local/lib/python3.6/site-packages/h5py/_hl/files.py",第142行,在make_fid中

     
fid = h5f.open(name, flags, fapl=fapl)
  
     

文件" h5py / _objects.pyx",第54行,在h5py._objects.with_phil.wrapper

     

文件" h5py / _objects.pyx",第55行,在h5py._objects.with_phil.wrapper

     

文件" h5py / h5f.pyx",第78行,在h5py.h5f.open

     

OSError:无法打开文件(错误的超级块版本号)

HDF5文件使用Java HDF5库从我无法修改的程序中编写,在SWMR(单写,多读取器)模式下使用hdf5 java 1.10.0。

程序可能无法正确关闭文件,然后再将其发送到我的程序,这是一个轻量级的Linux应用程序。

http://web.mit.edu/fwtools_v3.1.0/www/H5.format.html中,"超级块的版本号"描述如下......

  

该值用于确定超级块中信息的格式。当超级块中的信息格式发生变化时,版本号会增加到下一个整数,并可用于确定超级块中信息的格式化。

     

为此字段定义了0和1的值。

     

此字段存在于超级块的版本0+中。

...这并不能帮助我理解错误的超级版本号错误可能是什么。

这是我尝试打开的示例文件: https://drive.google.com/open?id=10hpbWj4HBwIMq0X6Rq7yVzJATOiYHJcc

为什么要提出一个stackoverflow问题?

此问题可能会影响在Linux计算机上要读取在Windows计算机上生成的hdf5文件且未正确关闭/格式化/等的所有人。我想知道为什么会发生这种情况的原因以及如何在Linux上解决这个问题。如果唯一的解决方案是"它需要由生成HDF5文件的Windows程序修复,因为之后无法修复",那么这也是一个可接受的答案。那是这样的吗?

采取的行动

  • 升级到h5py到2.8.0rc1并不能解决问题
  • 可以按预期打开其他HDF5文件

相关主题

我出于可能的原因查看了以下主题和网站,但空手而归:

1)https://support.hdfgroup.org/HDF5/faq/bkfwd-compat.html

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

3)HDF5 file created with h5py can't be opened by h5py

4)https://github.com/h5py/h5py/issues/757

5)http://web.mit.edu/fwtools_v3.1.0/www/H5.format.html

修改1:

感谢@Tom de Geus,我在Linux和Windows上尝试了HDF View,发现无法在Linux HDF View上打开示例文件,但可以使用Windows HDF View打开它。这表明问题出在文件和HDF中,而不是h5py。

1 个答案:

答案 0 :(得分:1)

感谢Pierre de Buyl确认该文件确实可以在Linux上使用正确的HDF版本1.10.0打开。在Windows上,事实证明我运行的是HDF 1.10.1(通过h5py安装),但在Linux上,默认安装的h5py给了我1.8.18。在使用cmake从源代码构建HDF之后,我也可以在Linux上打开该文件,版本为1.10.0或更高版本。

使用cmake安装HDF 1.10.0的指南: https://support.hdfgroup.org/HDF5/release/cmakebuild.html

错误消息" OSError:无法打开文件(错误的超级块版本号)"令人困惑,但似乎表明HDF(1.8.18)的旧版本没有配置为识别由HDF版本1.10.0编写的新超级版本号。

感谢您的帮助Tom de Geus和Pierre de Buyl:)