2

我有一个 hdf5 文件,我想通过删除其中一个数据集的属性来修改并保存文件而不进行进一步更改。我可以在 hdfview 中做到这一点,但我需要一些可编写脚本的东西,因为它需要应用于大量文件。

我尝试使用 h5py 在 python 中编写脚本:

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?

4

2 回答 2

3

h5py 脚本的问题在于您以只读模式(“r”)打开了文件。您需要使用 append 打开,如下所示:

inF = h5py.File("Filename.h5", 'a')
于 2015-02-09T05:07:41.740 回答
1

我最终使用了其中一种 hdf 工具 - h5copy:

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

由于我必须处理的所有文件都具有相同的数据集,而且数据集的数量相当少,因此我编写了一个 shell 脚本,在每个文件上调用 h5copy。

请注意,在组上运行 h5copy 不会删除该组中所有数据集的属性。

于 2014-10-23T23:11:36.573 回答