Python: чтение сжатого (.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')
и повторите это для каждого файла. Тем не менее, это занимает больше времени, чем я хочу.
Я думаю, что вполне возможно, что большая часть времени возникает из-за записи сжатого файла в новую несжатую версию, и что я мог бы ускорить его, если бы просто смог прочитать несжатую версию файла в SD
функция в один шаг.
Я прав в этом мышлении? И если так, есть ли способ сделать то, что я хочу?
2 ответа
Согласно документации пакета pyhdf, это невозможно.
__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)
sascha правильно, что прозрачное сжатие hdf более адекватно, чем gzipping, тем не менее, если вы не можете контролировать, как хранятся файлы hdf, вы ищете gzip
модуль Python (документы) он может получить данные из этих файлов.