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

时间:2014-10-23 19:58:32

标签: python hdf5 h5py hdf

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

我尝试使用h5py:

在python中编写脚本
import h5py
inF = h5py.File("Filename.h5", 'r')
dSet = inF['/data/myDataset']
del dSet.attrs['myAttrName']

但是我收到以下错误:

  

Traceback(最近一次调用最后一次):文件“”,第1行,in      文件“/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 个答案:

答案 0 :(得分:2)

h5py脚本的问题是您以只读模式(“r”)打开了文件。你需要打开with append,如下:

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

答案 1 :(得分:1)

我最终使用了一个hdf工具 - h5copy:

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

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

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