从HDF5文件中删除数据集属性

2 投票
2 回答
4019 浏览
提问于 2025-04-29 08:17

我有一个hdf5文件,我想通过删除其中一个数据集的属性来修改它,然后保存这个文件,不做其他更改。我可以在hdfview中做到这一点,但我需要一个可以编写脚本的方式,因为我需要对很多文件进行这个操作。

我尝试用Python写了一个脚本,使用了h5py库:

import h5py
inF = h5py.File("Filename.h5", 'r')
dSet = inF['/data/myDataset']
del dSet.attrs['myAttrName']

但是我遇到了以下错误:

错误追踪(最近的调用在前): 文件 "", 第 1 行, 在 文件 "/usr/lib/python2.7/dist-packages/h5py/_hl/attrs.py", 第 75 行, 在 delitem h5a.delete(self._id, self._e(name)) 文件 "h5a.pyx", 第 135 行, 在 h5py.h5a.delete (h5py/h5a.c:2682) KeyError: "无法删除属性(属性:无法删除消息)"

print dSet.attrs['myAttrName'] 这个命令能正确输出值,证明我可以访问这个属性。

还有其他方法可以做到这一点吗?也许可以使用h5repack?

暂无标签

2 个回答

3

你遇到的问题是因为你用只读模式打开了文件("r")。你需要用追加模式打开文件,像这样:

inF = h5py.File("Filename.h5", 'a')
1

我最后用了一个叫做h5copy的工具,属于hdf工具的一种:

h5copy -p -i inputFile.h5 -o outputFile.h5 -s /inputDataSetName -d /outputDataSetName -f noattr

因为我需要处理的所有文件都有相同的数据集,而且数据集的数量也不多,所以我写了一个shell脚本,让它对每个文件都调用一次h5copy。

需要注意的是,运行h5copy在一个组上,并不会删除该组中所有数据集的属性。

撰写回答