Python: 读取压缩 (.gz) HDF 文件而不写入和保存未压缩文件

Python: Read compressed (.gz) HDF file without writing and saving uncompressed file

我有大量压缩的 HDF 文件,需要阅读。

file1.HDF.gz
file2.HDF.gz
file3.HDF.gz
...

我可以用下面的方法读入未压缩的HDF文件

from pyhdf.SD import SD, SDC
import os

os.system('gunzip < file1.HDF.gz >  file1.HDF')
HDF = SD('file1.HDF')

并对每个文件重复此操作。然而,这比我想要的更耗时。

我认为大部分时间过载可能来自将压缩文件写入新的未压缩版本,如果我能够将文件的未压缩版本读入,我可以加快速度SD 功能一步到位。

我的想法对吗?如果是这样,有没有办法做我想做的事?

sascha 是正确的,hdf 透明压缩比 gzip 压缩更合适,但是如果您无法控制 hdf 文件的存储方式,您正在寻找 gzip python 模块 (docs) 它可以从这些文件中获取数据。

根据 pyhdf package documentation,这是不可能的。

__init__(self, path, mode=1)
  SD constructor. Initialize an SD interface on an HDF file,
  creating the file if necessary.

没有其他方法可以实例化采用类文件对象的 SD 对象。这可能是因为它们符合外部接口 (NCSA HDF)。 HDF 格式通常还可以处理无法一次性存储在内存中的大量文件。

将其作为文件解压缩可能是您最高效的选择。

如果您想留在 Python,请使用 gzip 模块 (docs):

import gzip
import shutil
with gzip.open('file1.HDF.gz', 'wb') as f_in, open('file1.HDF', 'rb') as f_out:
    shutil.copyfileobj(f_in, f_out)