Deleting hdf5 dataset using h5py

混江龙づ霸主 提交于 2019-12-06 18:45:09

问题


Is there any way to remove a dataset from an hdf5 file, preferably using h5py? Or alternatively, is it possible to overwrite a dataset while keeping the other datasets intact?

To my understanding, h5py can read/write hdf5 files in 5 modes

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

where mode can be rfor read, r+ for read-write, a for read-write but creates a new file if it doesn't exist, w for write/overwrite, and w- which is same as w but fails if file already exists. I have tried all but none seem to work.

Any suggestions are much appreciated.


回答1:


Yes, this can be done.

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

You will need to have the file open in a writeable mode, for example append (as above) or write.

As noted by @seppo-enarvi in the comments the purpose of the previously recommended f.__delitem__(datasetname) function is to implement the del operator, so that one can delete a dataset using del f[datasetname]




回答2:


I do not understand what has your question to do with the file open modes. For read/write r+ is the way to go.

To my knowledge, removing is not easy/possible, in particular no matter what you do the file size will not shrink.

But overwriting content is no problem

f['mydataset'][:] = 0



回答3:


I tried this out and the only way I could actually reduce the size of the file is by copying everything to a new file and just leaving out the dataset I was not interested in:

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)


来源:https://stackoverflow.com/questions/31861724/deleting-hdf5-dataset-using-h5py

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!