2024-05-17 11:34:43 发布
网友
有没有办法从hdf5文件中删除数据集,最好使用h5py?或者,是否可以覆盖一个数据集,同时保持其他数据集的完整性?
据我所知,h5py可以在5种模式下读/写hdf5文件
f = h5py.File("filename.hdf5",'mode')
其中模式可以是r用于读取,r+用于读写,a用于读写,但如果不存在则创建新文件,w用于写入/覆盖,以及w-,与w相同,但如果文件已存在则失败。我已经试过了,但似乎没有成功。
r
r+
a
w
w-
任何建议都非常感谢。
我试过了,唯一能真正减小文件大小的方法是将所有内容复制到一个新文件中,然后去掉我不感兴趣的数据集:
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]删除数据集
f.__delitem__(datasetname)
del
del f[datasetname]
我试过了,唯一能真正减小文件大小的方法是将所有内容复制到一个新文件中,然后去掉我不感兴趣的数据集:
我不明白你的问题和文件打开模式有什么关系。因为读/写r+是一条路。
据我所知,删除是不容易的/不可能的,尤其是不管你做什么,文件大小都不会缩小。
但覆盖内容没问题
是的,这是可以做到的。
您需要以可写模式打开文件,例如append(如上所述)或write。
正如@seppo enarvi在注释中指出的,先前推荐的
f.__delitem__(datasetname)
函数的目的是实现del
运算符,以便可以使用del f[datasetname]
删除数据集相关问题 更多 >
编程相关推荐