使用h5py删除hdf5数据集

时间:2015-08-06 17:04:39

标签: python dataset hdf5 h5py

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

据我了解,h5py可以在5种模式下读/写hdf5文件

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

其中mode为r表示读取,r+表示读写,a表示读写但创建新文件(如果不存在){{1}用于写入/覆盖,ww-相同但如果文件已存在则失败。我尝试了所有但似乎没有工作。

非常感谢任何建议。

4 个答案:

答案 0 :(得分:30)

是的,这可以做到。

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

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

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

删除数据集

答案 1 :(得分:0)

我不明白你对文件打开模式有什么问题。对于读/写,r +是要走的路。

据我所知,删除并不容易/可能,特别是无论你做什么,文件大小都不会缩小。

但是覆盖内容没问题

f['mydataset'][:] = 0

答案 2 :(得分:0)

我尝试了一下,实际上减小文件大小的唯一方法是将所有内容复制到一个新文件中,而只删除了我不感兴趣的数据集:

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)

答案 3 :(得分:0)

我想让您知道我的一位同事开发并在线开源的开发。它称为h5nav。您可以通过pip安装(https://pypi.org/project/h5nav/)下载它。

pip install h5nav

h5nav toto.h5
ls
rm the_group_you_want_to_delete
exit

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

最好, 杰罗姆(Jérôme)