使用h5py删除hdf5数据集

2024-05-17 11:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

其中模式可以是r用于读取,r+用于读写,a用于读写,但如果不存在则创建新文件,w用于写入/覆盖,以及w-,与w相同,但如果文件已存在则失败。我已经试过了,但似乎没有成功。

任何建议都非常感谢。


Tags: 文件数据mode模式filename建议filehdf5
3条回答

我试过了,唯一能真正减小文件大小的方法是将所有内容复制到一个新文件中,然后去掉我不感兴趣的数据集:

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)

我不明白你的问题和文件打开模式有什么关系。因为读/写r+是一条路。

据我所知,删除是不容易的/不可能的,尤其是不管你做什么,文件大小都不会缩小。

但覆盖内容没问题

f['mydataset'][:] = 0

是的,这是可以做到的。

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

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

正如@seppo enarvi在注释中指出的,先前推荐的f.__delitem__(datasetname)函数的目的是实现del运算符,以便可以使用del f[datasetname]删除数据集

相关问题 更多 >