在 zstd 情况下,我遇到了一些解压问题。我有 hdf5 格式的文件,以下列方式压缩:
import h5py as h5
import hdf5plugin
import sys
import os
filefrom = sys.argv[1]
h5path = sys.argv[2]
f = h5.File(filefrom,'r')
data = f[h5path]
shape_data = data.shape[1:]
num = data.shape[0]
initShape = (1,) + shape_data
maxShape = (num,) + shape_data
f_zstd = h5.File(filefrom.split('.')[0]+'_zstd.h5','w')
d_zstd = f_zstd.create_dataset(path_to_data, initShape, maxshape=maxShape, dtype=np.int32, chunks=initShape, **hdf5plugin.Zstd())
d_zstd[0,] = data[0,]
for i in range(num):
d_zstd.resize((i+1,) + shape_data)
d_zstd[i,] = data[i,]
f_zstd.close()
f.close()
所以它压缩时没有任何错误,但是当我尝试使用它查看数据时,h5ls
或者h5dump
它打印出我无法打印数据,并且没有其他方法可以查看文件内部,例如使用 h5py 在 python3 (3.6) 中读取这个压缩数据不成功。我还尝试了h5repack
( h5repack -i compressed_file.h5 -o out_file.h5 --filter=var:NONE
) 或以下代码:
import zstandard
import pathlib
import os
def decompress_zstandard_to_folder(input_file):
input_file = pathlib.Path(input_file)
destination_dir = os.path.dirname(input_file)
with open(input_file, 'rb') as compressed:
decomp = zstandard.ZstdDecompressor()
output_path = pathlib.Path(destination_dir) / input_file.stem
with open(output_path, 'wb') as destination:
decomp.copy_stream(compressed, destination)
什么都没有成功。在h5repack
没有出现警告或错误的情况下,我得到了最后一段代码zstd.ZstdError: zstd decompressor error: Unknown frame descriptor
,所以我得到这意味着压缩数据没有适当的标题。
我用python 3.6.7
, hdf5 1.10.5
。所以我有点困惑,不知道如何克服这个问题。
任何想法/建议都会很高兴!