Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用h5py删除hdf5数据集_Python_Dataset_Hdf5_H5py - Fatal编程技术网

Python 使用h5py删除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+是一

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

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

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