简要说明
我的问题是,在Windows机器上编写了一个hdf5文件,但在Linux机器上无法打开。错误消息是“OSError:无法打开文件(坏的超级块版本号)”。(因此,这个问题可能与h5py无关,而是Python文件打开时一般的Linux / Windows兼容性问题)。
详细说明
在Windows和Linux上都使用了以下软件包的Python虚拟环境:
- Flask-0.12.2
- Flask-RESTful-0.3.6
- Jinja2-2.10
- MarkupSafe-1.0
- Werkzeug-0.14.1
- aniso8601-3.0.0
- click-6.7
- h5py-2.7.1
- h5py-cache-1.0
- itsdangerous-0.24
- lockfile-0.12.2
- numpy-1.14.0
- pytz-2018.3
- six-1.11.0
import h5py
f1 = h5py.File("myfile.hdf5", "r")
完整错误信息:
HDF5文件是使用Java HDF5库从Windows机器上的程序编写的,我无法修改它,使用的是hdf5 java 1.10.0以SWMR(单写多读)模式。可能该程序在将文件发送给我的轻量级Linux应用程序之前未正确关闭文件。在http://web.mit.edu/fwtools_v3.1.0/www/H5.format.html中,"超级块版本号"描述如下...这并不能帮助我理解错误的超级块版本号是什么意思。Traceback (most recent call last):
File "stdin", line 1, in module
File "/usr/local/lib/python3.6/site-packages/h5py/_hl/files.py", line 312, in _ _ init_ _
fid = make_fid(name, mode, userblock_size, fapl, swmr=swmr)
File "/usr/local/lib/python3.6/site-packages/h5py/_hl/files.py", line 142, in make_fid
fid = h5f.open(name, flags, fapl=fapl)
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/h5f.pyx", line 78, in h5py.h5f.open
OSError: Unable to open file (bad superblock version number)
这是我要打开的一个示例文件: 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:无法打开文件(未找到文件签名) 3) 使用h5py创建的HDF5文件无法被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。
h5py.version.hdf5_version
是1.10.0
。 - Pierre de Buyl