从HDF5文件中删除数据集属性
我有一个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在一个组上,并不会删除该组中所有数据集的属性。