未正确关闭的h5py生成HDF文件报错该如何修复?
注意不要直接使用a/w等写入模式打开损坏的文件,避免二次覆盖数据
修复方案
方案1:优先尝试只读模式导出数据
未正常关闭的HDF5文件大多只是元数据标记异常,实际存储的数据块本身完整,先使用只读模式尝试读取内容,再导出到新文件即可:
import h5py # 仅用只读模式打开,不会触发写入/创建逻辑 with h5py.File("DataStorage/0_-150.hdf5", "r") as f: # 遍历读取所有数据集内容 all_data = {key: f[key][()] for key in f.keys()} # 将读取到的内容写入新的HDF5文件即可正常使用 with h5py.File("repaired_output.hdf5", "w") as f: for key, val in all_data.items(): f.create_dataset(key, data=val)
方案2:使用官方修复工具h5repair
如果只读模式也抛出签名错误,使用HDF5官方配套的修复工具处理:
- 先安装对应系统的HDF5工具包:
- Ubuntu/Debian系:执行
apt install hdf5-tools - CentOS/RHEL系:执行
yum install hdf5
- Ubuntu/Debian系:执行
- 执行修复命令:
h5repair -o repaired_file.hdf5 DataStorage/0_-150.hdf5
修复完成后直接打开新生成的repaired_file.hdf5即可使用。
不可修复的极端情况
只有当文件写入中断时刚好在修改核心数据块,才会出现完全无法修复的情况,这种情况才需要重新运行模拟。绝大多数未正常关闭导致的元数据损坏都可以通过上面两种方法恢复。
内容的提问来源于stack exchange,提问作者Seabody
相关产品推荐
相关产品推荐

