Сжатие существующего файла с помощью h5py

В настоящее время я работаю над проектом по сжатию наборов данных HDF5 и недавно начал использовать h5py. Я следовал базовым руководствам и смог открывать, создавать и сжимать файл во время его создания. Однако мне не удалось сжать существующий файл (что и является целью моей работы).

Я пробовал открывать файлы с помощью 'r+', а затем сжимать разрозненные наборы данных, но размеры файлов остались прежними.

Любые предложения о том, какие команды использовать, или я делаю что-то неправильно?


person kromegaman    schedule 09.04.2013    source источник


Ответы (2)


Группа HDF предоставляет набор инструментов для преобразования, отображения, анализа, редактирования и переупаковки файлов HDF5. файл.

Вы можете сжать существующий файл hdf5 с помощью утилиты h5repack. Вы также можете изменить размер чанка с помощью той же утилиты.

h5repack можно использовать из командной строки.

h5repack file1 file2 //удаляет учитываемое пространство файла 1 и сохраняет его как файл2.

h5repack -v -l CHUNK=1024 file1 file2 //Применяет фрагментацию 1024 к файлу1

h5repack -v -l CHUNK=1024 GZIP=5 file1 file2 //создает куски по 1024 и сжимает их с помощью сжатия GZIP уровня 5

h5repack --help \получает доступную справочную документацию

Также доступна Подробная документация.

person Shubhjot    schedule 20.08.2018

Сжатие очень легко использовать в h5py. Ознакомьтесь с вики HowTo и Сжатие. В принципе, это будет что-то вроде:

ds = myfile.create_dataset('ds', shape, dtype, compression='lzf')

Есть также некоторые проблемы с тем, как вы выбираете размеры фрагментов для оптимизации размера/доступа к файлу, см. Руководство по сжатию, на которое я ссылался.

Я не помню, какое сжатие, если оно есть, включено по умолчанию.

person Bitwise    schedule 09.04.2013
comment
Да, я пробовал именно это, однако, похоже, это работает только для меня при создании нового файла, например. Я могу создать новый файл с размером фрагмента (100 100), в котором включено сжатие gzip/szip/lzf. Когда я загружаю существующий файл, кажется, что сжатие работает только в том случае, если содержимое исходного файла перезаписывается и создается новый (с тем же именем, что и оригинал). Когда я загружаю файл, создаю фрагментированный набор данных, включаю сжатие, а затем закрываю файл, кажется, что никакого эффекта или изменений нет вообще. У меня такое чувство, что я пропускаю шаг, хотя не уверен, что это такое. - person kromegaman; 10.04.2013
comment
Сжатие @kromegaman и размер фрагмента являются рекомендациями по записи файла на диск. Я не думаю, что это то, что вы можете изменить для существующего файла, так как он уже написан. Я думаю, что единственный способ изменить сжатие/фрагменты — это написать новый файл с этими настройками. - person Bitwise; 10.04.2013
comment
Да, чем больше я его использую, тем больше это кажется таким. Думаю, мне придется создать новый файл и набор данных, скопировать данные из существующего файла в новый, а затем сжать новый файл по мере его создания. Тем не менее большое спасибо за помощь! - person kromegaman; 10.04.2013
comment
@kromegaman В дополнение к тому, что сказал Bitwise, сжатие и размер фрагмента, а также некоторые другие свойства устанавливаются при создании набора данных и не могут быть изменены впоследствии. В разных наборах данных могут использоваться разные алгоритмы сжатия или размеры фрагментов. Кроме того, по умолчанию отсутствует сжатие. - person Yossarian; 26.04.2013