使用H5Py写入HDF5文件后用HDFView打开为空的问题咨询
问题根因
你遇到的是HDF版本兼容性问题:h5py 3.2.1默认绑定的是HDF5 1.10+版本,生成的文件默认启用了新版格式特性;而HDFView 2.11是基于老旧的HDF5 1.8版本编译的,无法识别新版格式,就会出现文件大小正常但显示为空的情况。
可行解决方案
方案1:修改h5py文件创建参数,兼容旧版HDF库
创建HDF5文件时指定libver参数限制格式版本为1.8系列,修改文件初始化行即可:# 原代码:f = h5py.File('testFile.hdf5', 'w') # 替换为 f = h5py.File('testFile.hdf5', 'w', libver=('earliest', 'v108'))重新运行脚本后生成的文件就可以用HDFView 2.11正常打开。
方案2:优化文件操作逻辑避免数据未刷入磁盘
建议用Python上下文管理器(with语句)操作HDF5文件,不需要手动调用close(),也能避免程序中途异常退出导致数据未写入磁盘的问题,修改后完整代码如下:import h5py import numpy as np def main(): with h5py.File('testFile.hdf5', 'w', libver=('earliest', 'v108')) as f: simBigData = np.random.randint(50, size=(24, 6), dtype=np.int32) simSmallData = np.random.randint(50, size=(8, 6), dtype=np.int32) simOut = np.random.randint(50, size=(8, 6), dtype=np.int32) grp = f.create_group('testGroup') grp.create_dataset('bigData', data=simBigData) grp.create_dataset('smallData', data=simSmallData) grp.create_dataset('out', data=simOut) print('HDF5 Data') print(f['testGroup/bigData']) print(f['testGroup/smallData']) print(f['testGroup/out']) if __name__ == '__main__': main()方案3:升级HDFView版本
不想修改代码的话,直接将HDFView升级到3.0及以上版本即可,新版HDFView基于HDF5 1.10+编译,可以直接识别h5py 3.x默认生成的HDF5文件。
验证方法
修改代码运行后,可以先用h5py读取本地生成的文件确认数据已正常写入:
import h5py with h5py.File('testFile.hdf5', 'r') as f: print(list(f.keys())) # 会输出['testGroup']说明根组下已有内容,排除写入失败问题
内容的提问来源于stack exchange,提问作者Tyrian
相关产品推荐
相关产品推荐

