使用h5py压缩现有文件

9
我目前正在从事有关HDF5数据集压缩的项目,并最近开始使用h5py。我按照基本教程操作,能够在创建文件时打开、创建和压缩文件。但是,当涉及到压缩现有文件时(这是我的工作目标),我一直没有成功。
我尝试使用“r+”打开文件,然后压缩块数据集,但是文件大小仍然相同。
请问应该使用哪些命令?或者我的方法错了吗?
2个回答

5
HDF组提供了一套工具,用于转换、显示、分析和编辑以及重新打包您的HDF5文件。
您可以使用h5repack实用程序压缩现有的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//使用GZIP级别5压缩将1024分块 h5repack --help \获取可用的帮助文档

详细文档也可用。


2

在h5py中,压缩非常容易使用。请查看Wiki HowToCompression 指南。 基本上,它会像这样:

ds = myfile.create_dataset('ds', shape, dtype, compression='lzf')

在优化文件大小/访问时,选择块大小存在一些问题,请参考我提供的压缩指南。

我不记得哪种压缩(如果有)是默认开启的。


1
是的,我已经尝试过这样做了,但似乎只有在创建新文件时才能正常工作。例如,我可以创建一个启用gzip/szip/lzf压缩的块大小为(100,100)的新文件。当我加载现有文件时,唯一实际起作用的压缩方式似乎是覆盖原始文件的内容并创建一个新文件(与原始文件同名)。当我加载文件、创建分块数据集、启用压缩并关闭文件时,似乎没有任何效果或变化。我感觉自己漏掉了一步,但不确定是什么。 - kromegaman
1
@kromegaman 压缩和块大小是文件写入磁盘的指南。我认为对于现有文件,这是无法更改的,因为它已经被写入。我认为更改压缩/块的唯一方法是使用这些设置编写新文件。 - Bitwise
是的,我使用它的次数越多,它似乎就是那样。我想我得创建一个新文件和数据集,将现有文件中的数据复制到新文件中,然后在创建它时压缩新文件。不过,非常感谢您的帮助! - kromegaman
2
@kromegaman 根据Bitwise所说,压缩和块大小以及其他一些属性是在创建数据集时设置的,之后无法更改。不同的数据集可以使用不同的压缩算法或块大小。此外,默认情况下没有压缩。 - Yossarian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接