Python 使用h5py删除hdf5数据集
有没有办法从hdf5文件中删除数据集,最好使用h5py?或者,是否可以覆盖一个数据集,同时保持其他数据集不变 据我所知,h5py可以在5种模式下读取/写入hdf5文件Python 使用h5py删除hdf5数据集,python,dataset,hdf5,h5py,Python,Dataset,Hdf5,H5py,有没有办法从hdf5文件中删除数据集,最好使用h5py?或者,是否可以覆盖一个数据集,同时保持其他数据集不变 据我所知,h5py可以在5种模式下读取/写入hdf5文件 f = h5py.File("filename.hdf5",'mode') 其中模式可以是r进行读取,r+进行读写,a进行读写,但如果文件不存在则创建一个新文件,w进行写入/覆盖,w-与w相同,但如果文件已经存在则失败。我试过了,但似乎没有一个管用 非常感谢您的建议。我不明白您的问题与文件打开模式有什么关系。对于读/写,r+是一
f = h5py.File("filename.hdf5",'mode')
其中模式可以是r
进行读取,r+
进行读写,a
进行读写,但如果文件不存在则创建一个新文件,w
进行写入/覆盖,w-
与w
相同,但如果文件已经存在则失败。我试过了,但似乎没有一个管用
非常感谢您的建议。我不明白您的问题与文件打开模式有什么关系。对于读/写,r+是一个不错的选择 据我所知,删除是不容易/不可能的,尤其是无论你做什么,文件大小都不会缩小 但覆盖内容并不是问题
f['mydataset'][:] = 0
是的,这是可以做到的
with h5py.File(input, "a") as f:
del f[datasetname]
您需要以可写模式打开文件,例如追加(如上所述)或写入
正如@seppo enarvi在评论中所指出的,先前推荐的
f.\uu delitem\uuu(datasetname)
函数的目的是实现del
操作符,以便可以使用del f[datasetname]删除数据集
我尝试过这个方法,唯一能真正减小文件大小的方法是将所有内容复制到一个新文件中,只保留我不感兴趣的数据集:
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)
我想让你们了解我的一位同事在开源软件中开发并上线的一个项目。它被称为
h5nav
。您可以使用pip安装()下载它
请注意,您仍然必须使用h5repack来降低文件的大小
最好的,
Jérôme函数的目的是实现
del
操作符,这样就可以使用del f[datasetname]
@SeppoEnarvi删除数据集。那么,您是说语法应该是使用h5py.File(输入,“a”)作为f:del f[datasetname]
而不是上面写的内容?我会使用delf[datasetname]
,因为这是Python中删除对象的标准方法,这也是文档建议的。但它们可能都能工作。删除几个数据集后,文件大小保持不变。我试图删除一个6 GB文件的一半数据,但其大小始终不变,这能解决吗?@Prateeswaran,您可能需要使用HDF组的命令行实用程序之一重新打包该文件,或者您可以将内容复制到一个新文件,然后用它替换现有文件。我相信,由于HDF5使用的是树状结构,因此恢复空间并不简单。del h5py_文件[dataset_address]
或…,您可以创建一个新的HDF5文件,并从旧文件中复制您需要的内容。我建议根据一些假设进行编辑(SFS_转换是您的工作特有的东西?),以使您的答案更一般,如果我误解了什么,请往后退
pip install h5nav
h5nav toto.h5
ls
rm the_group_you_want_to_delete
exit