使用h5py保存多个数据集时仅最后一个留存,如何修复?
问题根源
你代码里的核心错误是每次循环都以"w"模式打开HDF5文件。"w"是写入模式,会直接清空目标文件并创建新文件——这意味着每次循环都会把之前写入的所有数据集彻底覆盖,最后自然只剩最后一次循环的结果;加break后循环只跑一次,就只会保留第一个数据集。
修正后的代码
把文件的打开/关闭操作移到循环外面,用同一个文件句柄完成所有数据集的写入:
set_num = 0 # 用with语句管理文件,自动处理关闭,避免资源泄漏 with h5py.File(output_file, "w") as ipt: for cur in data["init"]: # 这里保留你获取result的逻辑 s = str(set_num) ipt[s] = result # 保留你给数据集添加属性的逻辑,比如: # ipt[s].attrs["description"] = "your attribute content" set_num += 1
补充说明
- 如果需要往已存在的HDF5文件里追加数据集,把打开模式改成
"a"(追加模式)即可,但注意"w"模式会直接清空原有文件,不要混用 with语句是Python处理文件的最佳实践,无需手动调用close(),代码块结束后会自动安全关闭文件
内容的提问来源于stack exchange,提问作者Circled9
相关产品推荐
相关产品推荐

