Python:读取压缩(.gz)HDF文件,无需编写和保存未压缩文件

时间:2017-08-28 20:33:04

标签: python compression gz hdf

我有大量压缩的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')

并为每个文件重复此操作。但是,这比我想要的更耗时。

我认为可能大部分时间都是将压缩文件写入新的未压缩版本,如果我只是能够将文件的未压缩版本读入{ {1}}一步完成功能。

我在这个想法中是否正确?如果是这样,有没有办法做我想做的事?

2 个答案:

答案 0 :(得分:4)

根据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)

答案 1 :(得分:0)

sascha是正确的,hdf透明压缩比gzipping更合适,但是如果你无法控制hdf文件的存储方式,那么你正在寻找gzip python modulue (docs)它可以获得来自这些文件的数据。