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

Python 从HDF5文件中删除数据集属性,python,hdf5,h5py,hdf,Python,Hdf5,H5py,Hdf,我有一个hdf5文件,我想通过删除其中一个数据集的属性来修改该文件,并保存该文件,无需进一步更改。我可以在hdfview中实现这一点,但我需要一些可编写脚本的东西,因为它需要应用于大量文件 我尝试用python编写脚本,使用h5py: import h5py inF = h5py.File("Filename.h5", 'r') dSet = inF['/data/myDataset'] del dSet.attrs['myAttrName'] 但我得到了以下错误: 回溯(最近一次调用):文件

我有一个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)键错误:“无法删除 属性(属性:无法删除邮件)”

print dSet.attrs['myAttrName']
生成正确的值,证明我可以访问该属性


还有其他方法吗?也许用H5重新包装

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

h5copy -p -i inputFile.h5 -o outputFile.h5 -s /inputDataSetName -d /outputDataSetName -f noattr
因为我必须处理的所有文件都有相同的数据集,而且数据集的数量相当少,所以我编写了一个shell脚本,在每个文件上调用h5copy


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

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

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

这是正确的答案。到目前为止(Python:3.8.5,h5py:2.10.0),当文件以只读模式打开时,关于主题
KeyError:“无法删除属性(文件无写意图)”
的错误消息更为清晰。