我使用LZF压缩的h5py将NumPy数组存储在HDF5文件中。
它工作得很好,而且我的压缩文件比未压缩的文件更可移植。但是,如果我试图使用履历和HDFView等应用程序查看压缩文件,则会出现以下错误:
错误:读取记录时出错。数据集似乎是用无库压缩的。请检查它是否安装在您的系统中,请“在可移植的和
“ncsa.hdf.hdf5lib.exceptions.HDF5LibraryException::ncsa.hdf.hdf5lib.exceptions.HDF5Exception无法打开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()这种行为是预期的,还是我做错了什么?
如果和HDFView无法打开压缩数组,是否有其他查看器可以打开?
非常感谢!
发布于 2014-07-29 13:35:29
虽然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)发布于 2017-04-05 10:26:45
对于用LZF压缩存储的数据集,我也遇到了同样的问题,最后我找到了这篇文章。使用HDFView,我设法查看了使用GZIP压缩的数据集,压缩级别为9,即:
dset = f.create_dataset('someData', data=data, compression="gzip", compression_opts=9)但我还是想看到LZF压缩的数据集。HDF5文件有一个GUI界面,名为HDF罗盘 (Github回购),它是由安德鲁·科莱特开发的,在HDF世界中非常有名。当这个问题被问到时,HDF指南针的发展才刚刚开始。今天,我测试了0.6.0版本,并设法正确地查看了一个LZF压缩文件。
PD:只是一个警告,HDFView只是一个只读工具,不像HDFView.但是,它仍然是非常友好的用户和真正的快捷。
https://stackoverflow.com/questions/24998946
复制相似问题