我想要通过删除其中一个数据集的属性来修改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?
答案 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不会删除该组中所有数据集的属性。