python h5py file read "OSError: Unable to open file (bad superblock version number)"

python h5py file read "OSError: Unable to open file (bad superblock version number)"

简短说明

我遇到一个问题,hdf5 文件已写入 Windows 机器,无法在 Linux 机器上打开。错误消息是 "OSError: Unable to open file (bad superblock version number)"。 (因此,此问题可能与 h5py 根本无关,而是 linux/windows 打开文件中的一般 linux/windows 兼容性问题。

详细说明

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

在 Windows 上,可以毫无问题地打开和读取文件,但在 Linux 上它不能,抛出 OSError。只需开始一个新的 python 会话并输入以下内容就足够了:

import h5py

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

完整错误:

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)

文件“/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 文件是在 Windows 机器上用 Java HDF5 库从我无法修改的程序中写入的,在 SWMR 中使用 hdf5 java 1.10.0(单写, 多-reader) 模式.

程序可能在将文件进一步发送到我的程序(一个轻量级 Linux 应用程序)之前没有正确关闭文件。

http://web.mit.edu/fwtools_v3.1.0/www/H5.format.html中,"Version Number of the Super Block"描述如下...

This value is used to determine the format of the information in the super block. When the format of the information in the super block is changed, the version number is incremented to the next integer and can be used to determine how the information in the super block is formatted.

Values of 0 and 1 are defined for this field.

This field is present in version 0+ of the superblock.

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

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

为什么要从中提出一个 Whosebug 问题?

这个问题可能会影响到 Linux 机器上想要读取在 Windows 机器上生成的 hdf5 文件但不正确 closed/formatted/etc 的每个人。我想知道发生这种情况的原因以及我如何解决这个问题,Linux。如果唯一的解决方案是 "It needs to be fixed by the Windows program generating the HDF5 file, as this cannot be fixed afterwards",那么这也是一个可以接受的答案。这里是这样吗?

采取的行动

相关主题

出于可能的原因,我查看了以下主题和网站,但一无所获:

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 视图打开。这表明问题出在文件和 HDF 中,而不是 h5py。

感谢 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: Unable to open file (bad superblock version number)" 令人困惑,但似乎表明旧版本的 HDF (1.8.18) 未配置为识别由 HDF 1.10.0 版编写的新超级块版本号。

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