使用 h5py 删除 hdf5 数据集

Deleting hdf5 dataset using h5py

有没有办法从 hdf5 文件中删除数据集,最好使用 h5py?或者,是否可以在保持其他数据集不变的情况下覆盖数据集?

据我了解,h5py 可以 read/write 5 种模式的 hdf5 文件

f = h5py.File("filename.hdf5",'mode')

其中模式可以是 r 读取,r+ 读写,a 读写但如果文件不存在则创建一个新文件,w 用于 write/overwrite,w-w 相同,但如果文件已存在则失败。我已经尝试了所有但 none 似乎有效。

非常感谢任何建议。

我不明白你的问题与文件打开模式有什么关系。对于 read/write r+ 是要走的路。

据我所知,删除不是 easy/possible,特别是无论您做什么,文件大小都不会缩小。

但是覆盖内容没问题

f['mydataset'][:] = 0

是的,这是可以做到的。

with h5py.File(input,  "a") as f:
    del f[datasetname]

您需要以可写模式打开文件,例如附加(如上所述)或写入。

正如@seppo-enarvi 在评论中指出的那样,之前推荐的f.__delitem__(datasetname)函数的目的是实现 del 运算符,因此可以使用 del f[datasetname]

删除数据集

我试过了,我真正可以减小文件大小的唯一方法是将所有内容复制到一个新文件中,只留下我不感兴趣的数据集:

fs = h5py.File('WFA.h5', 'r')
fd = h5py.File('WFA_red.h5', 'w')
for a in fs.attrs:
    fd.attrs[a] = fs.attrs[a]
for d in fs:
    if not 'SFS_TRANSITION' in d: fs.copy(d, fd)

我想让您了解我的一位同事开发并以开源方式在线发布。它被称为h5nav。您可以使用 pip install (https://pypi.org/project/h5nav/) 下载它。

pip install h5nav

h5nav toto.h5
ls
rm the_group_you_want_to_delete
exit

请注意,您仍然需要使用 h5repack 来减小文件的大小。

最好的, 杰罗姆