Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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压缩现有文件_Python_Compression_Hdf5_H5py - Fatal编程技术网

Python 使用h5py压缩现有文件

Python 使用h5py压缩现有文件,python,compression,hdf5,h5py,Python,Compression,Hdf5,H5py,我目前正在从事一个有关HDF5数据集压缩的项目,最近开始使用h5py。我遵循基本教程,能够在创建文件时打开、创建和压缩文件。但是,在压缩现有文件(这是我工作的目标)方面,我一直没有成功 我曾尝试使用“r+”打开文件,然后压缩分块数据集,但文件大小保持不变 关于使用什么命令或我是否走错了方向,有什么建议吗?压缩在h5py中非常容易使用。查看Wiki和指南。 基本上是这样的: ds = myfile.create_dataset('ds', shape, dtype, compression='lz

我目前正在从事一个有关HDF5数据集压缩的项目,最近开始使用h5py。我遵循基本教程,能够在创建文件时打开、创建和压缩文件。但是,在压缩现有文件(这是我工作的目标)方面,我一直没有成功

我曾尝试使用“r+”打开文件,然后压缩分块数据集,但文件大小保持不变


关于使用什么命令或我是否走错了方向,有什么建议吗?

压缩在h5py中非常容易使用。查看Wiki和指南。 基本上是这样的:

ds = myfile.create_dataset('ds', shape, dtype, compression='lzf')
在如何选择块大小以优化文件大小/访问方面也存在一些问题,请参阅我链接的压缩指南

我不记得默认情况下启用了哪个压缩(如果有的话)。

HDF组提供了一个转换、显示、分析、编辑和重新打包HDF5文件的方法

您可以使用该实用程序压缩现有hdf5文件。还可以使用相同的实用程序更改块大小

h5repack可从命令行使用

h5repack file1 file2
//删除文件1的占用空间并将其保存为file2

h5repack-v-l CHUNK=1024 file1 file2
//对file1应用1024的分块

h5repack-v-l CHUNK=1024 GZIP=5 file1 file2
//生成1024个块并对其进行压缩 使用GZIP 5级压缩

h5repack--help
\获取可用的帮助文档


也是可用的。

是的,我确实尝试过,但是它似乎只在创建新文件时对我有效,例如,我可以创建一个块大小(100100)的新文件,该文件启用了gzip/szip/lzf压缩。当我加载一个现有文件时,压缩似乎真正起作用的唯一方式是覆盖原始文件的内容并创建一个新文件(与原始文件同名)。当我加载一个文件,创建一个分块数据集,启用压缩,然后关闭该文件时,似乎没有任何影响或更改。我觉得我错过了一个步骤,不知道是什么。@kromegaman压缩和块大小是文件写入磁盘的指导原则。我不认为这是可以为现有文件更改的内容,因为它已经编写好了。我认为更改压缩/块的唯一方法是使用这些设置编写一个新文件。是的,我使用的越多,这种方式似乎就越多。我想我必须创建一个新文件和数据集,将现有文件中的数据复制到新文件中,然后在创建时压缩新文件。尽管如此,还是非常感谢您的帮助@kromegaman进一步说,压缩和块大小以及其他一些属性是在创建数据集时设置的,以后不能更改。不同的数据集可以使用不同的压缩算法或块大小。此外,默认情况下没有压缩。