我with今天第一次遇到了Python 语句.我已经使用Python几个月了,甚至不知道它的存在!鉴于其地位有点模糊,我认为值得问:
with设计用于的Python 语句? try..finally比它更好用的情况with?我一直在使用以下代码来打开一些HDF5文件,在MATLAB中使用H5PY在python中生成:
import h5py as h5
data='dataset.mat'
f=h5.File(data, 'r')
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
OSError: Unable to open file (File signature not found)
Run Code Online (Sandbox Code Playgroud)
我已经检查过我要打开的文件是版本7.3 MAT文件并且是HDF5格式.事实上,我之前使用H5PY成功打开了相同的文件.我已经确认文件存在且可访问,因此我不确定错误的来源.任何建议将不胜感激,提前感谢:)
我正在使用 h5py 将实验数据存储在 HDF5 容器中。
在交互式会话中,我使用以下命令打开文件:
measurement_data = h5py.File('example.hdf5', 'a')
Run Code Online (Sandbox Code Playgroud)
然后我使用一些自己编写的函数将数据写入文件(可以是几天实验中的许多 GB 数据)。在实验结束时,我通常会使用
measurement_data.close()
Run Code Online (Sandbox Code Playgroud)
不幸的是,有时会发生交互式会话在没有我明确关闭文件的情况下结束(意外终止会话、断电、由于某些其他软件导致操作系统崩溃)。这总是会导致文件损坏和完整数据丢失。当我尝试打开它时,出现错误:
OSError: Unable to open file (File signature not found)
Run Code Online (Sandbox Code Playgroud)
我也无法在 HDFview 或我尝试过的任何其他软件中打开该文件。
每次写访问时总是打开和关闭文件对我来说听起来很不利,因为我不断地从许多不同的函数和线程写入数据。所以我会更满意不同的解决方案。
简短的介绍
我有一个问题,其中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 : …