Mie*_*rpo 5 python linux windows hdf5 h5py
简短的介绍
我有一个问题,其中hdf5文件已在Windows计算机上写入,而无法在Linux计算机上打开。错误消息是“ OSError:无法打开文件(错误的超级块版本号)”。(因此,此问题可能根本与h5py不相关,而是在python文件打开中出现的一般linux / windows兼容性问题)。
详细描述
Windows和Linux均使用了具有以下软件包的python虚拟环境:
在Windows上,可以打开并读取文件而不会出现问题,但是在Linux上,则不能打开,并抛出OSError。只需启动一个新的python会话并键入以下命令就足够了:
导入h5py
f1 = h5py.File(“ myfile.hdf5”,“ r”)
完整错误:
追溯(最近一次通话):
文件“ stdin”,第1行,在模块中
_ _ init_ _中的文件“ /usr/local/lib/python3.6/site-packages/h5py/_hl/files.py”,第312行
Run Code Online (Sandbox Code Playgroud)fid = make_fid(name, mode, userblock_size, fapl, swmr=swmr)在make_fid中的文件“ /usr/local/lib/python3.6/site-packages/h5py/_hl/files.py”,第142行
Run Code Online (Sandbox Code Playgroud)fid = h5f.open(name, flags, fapl=fapl)在h5py._objects.with_phil.wrapper中的文件“ h5py / _objects.pyx”第54行
在h5py._objects.with_phil.wrapper中的文件“ h5py / _objects.pyx”,第55行
在h5py.h5f.open中的文件“ h5py / h5f.pyx”,第78行
OSError:无法打开文件(错误的超级块版本号)
HDF5文件是使用无法在Windows Java计算机上使用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程序修复,因为此后无法修复”,那么这也是一个可以接受的答案。是这样吗?
所采取的行动
相关话题
出于可能的原因,我查看了以下主题和网站,但空手而归:
1)https://support.hdfgroup.org/HDF5/faq/bkfwd-compat.html
2)h5py OSError:无法打开文件(未找到文件签名)
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中。
感谢 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 的帮助:)
| 归档时间: |
|
| 查看次数: |
3490 次 |
| 最近记录: |