我使用h5py with LZF compression在HDF5文件中存储NumPy数组。
效果很好,我的压缩文件比未压缩的文件便携得多。但是,如果我尝试使用vitables和HDFView等应用程序查看压缩文件,则会出现以下错误:
" 错误:读取记录时出现问题。数据集似乎使用None库进行压缩。检查它是否已安装在您的系统中,请"在 vitables 和
" ncsa.hdf.hdf5lib.exceptions.HDF5Exception:ncsa.hdf.hdf5lib.exceptions.HDF5LibraryException:无法打开目录或文件"在 HDFView 中。
我可以在两个应用程序中浏览文件结构正常,但打开数组会产生错误。如果我关闭压缩,问题就会消失。例如,在运行下面的代码后,打开 array_1 会给我错误,但 array_2 不会。
import numpy as np, h5py
h5_path = r'D:\test.h5'
f = h5py.File(h5_path, 'w')
# Create fake data
data = (np.random.random(1E6)*100).astype(int)
# Save with compression
dset1 = f.create_dataset(r'/path/to/arrays/array_1', data=data,
compression='lzf')
# Save without compression
dset2 = f.create_dataset(r'/path/to/arrays/array_2', data=data)
# Set some object properties
dset1.attrs['Description'] = 'Compressed array.'
dset2.attrs['Description'] = 'Uncompressed array.'
f.close()
预计会出现这种情况,还是我做错了什么?
如果vitables和HDFView无法打开压缩数组,是否有其他可以查看的查看器?
非常感谢!
答案 0 :(得分:5)
我对使用LZF压缩存储的数据集有完全相同的问题,我最终找到了这篇文章。使用HDFView,我设法查看使用压缩级别为9的GZIP压缩的数据集,即:
dset = f.create_dataset('someData', data=data, compression="gzip", compression_opts=9)
但我仍然希望看到LZF压缩数据集。有一个名为HDF Compass(Github repo)的HDF5文件的GUI界面,由Andrew Collette开发,在HDF世界中众所周知。当问到这个问题时,HDF指南针的开发刚刚开始。今天我测试了0.6.0版,我设法正确查看了LZF压缩文件。
PD:只是警告,HDF Compass只是一个只读工具,与HDFView不同。但是,它仍然非常用户友好,非常活泼。答案 1 :(得分:2)
虽然h5py附带LZF,但HDF5本身通常不会使用LZF进行分发或编译。 相反,您可以使用gzip,它包含在所有HDF5版本中,因此可以在任何系统上打开:
dset1 = f.create_dataset(r'/path/to/arrays/array_1', data=data,
compression='gzip')
HDFView可以打开使用gzip压缩的数组。
此外,如果您使用gzip,则可以使用compression_opts
来设置压缩级别(0到9之间的整数):
dset1 = f.create_dataset(r'/path/to/arrays/array_1', data=data,
compression='gzip', compression_opts=9)