有没有办法从hdf5文件中删除数据集,最好是使用h5py?或者,是否可以覆盖数据集,同时保持其他数据集不变?
据我了解,h5py可以在5种模式下读/写hdf5文件
f = h5py.File("filename.hdf5",'mode')
其中mode为r
表示读取,r+
表示读写,a
表示读写但创建新文件(如果不存在){{1}用于写入/覆盖,w
与w-
相同但如果文件已存在则失败。我尝试了所有但似乎没有工作。
非常感谢任何建议。
答案 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)