【问题标题】:Delete dataset attribute from HDF5 file从 HDF5 文件中删除数据集属性
【发布时间】:2014-12-19 14:37:19
【问题描述】:

我有一个 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?

【问题讨论】:

    标签: python hdf5 h5py hdf


    【解决方案1】:

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

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

    【讨论】:

    • 这是正确的答案。截至目前(Python:3.8.5,h5py:2.10.0),当文件以只读模式打开时,关于该主题KeyError: 'Unable to delete attribute (no write intent on file)' 的错误消息更加清晰。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 2015-10-29
      • 2012-06-27
      • 2020-08-12
      • 2018-10-17
      • 2010-10-01
      • 1970-01-01
      • 2018-05-19
      相关资源
      最近更新 更多