Удаление информации из файла HDF5
Я понимаю, что пользователь SO ранее задавал этот question, но он был задан в 2009 году, и я надеялся, что больше знаний о HDF5 будет доступно или более новые версии Уточнил этот конкретный вопрос. Чтобы повторить здесь вопрос о моей собственной проблеме,
У меня есть гигантский файл узлов и элементов из большой геометрии и уже получил всю полезную информацию, которая мне нужна. Поэтому в Python я пытаюсь сохранить исходный файл, но удалю информацию, которая мне не нужна, и заполните дополнительную информацию для других источников. Например, у меня есть набор узлов, которые мне не нужны. Однако мне нужно сохранить соседний набор данных и включить информацию об их индексах из внешнего файла. Есть ли способ удалить эти конкретные наборы данных?
Или старая идея иметь "placekeepers" в файле HDF5, который все еще остается правдой, так что никто не знает, как/беспокоиться об удалении информации? Я не слишком беспокоюсь о пустом пространстве, поскольку быстрее просто удалить и добавить информацию, чтобы создать совершенно новый файл.
Примечание. Я использую H5py 'r +' для чтения и записи.
Ответы
Ответ 1
Удаление целых узлов (групп или наборов данных) из файла hdf5 не должно быть проблемой.
Однако, если вы хотите вернуть пространство, вам нужно запустить инструмент h5repack
.
Из hdf5 документов:
5.5.2. Удаление набора данных из файла и исправления пробела
HDF5 в настоящее время не обеспечивает простой механизм для удаления набора данных из файла или для восстановления места хранения, занимаемого удаленный объект.
Удаление набора данных и исправление используемого им пространства можно сделать с помощью функцию H5Ldelete и служебную программу h5repack. С Функция H5Ldelete, ссылки на набор данных могут быть удалены из файла состав. После того, как все ссылки были удалены, набор данных становится недоступен для любого приложения и эффективно удаляется из файл. Способ восстановления пространства, занятого несвязанным набором данных, - это для записи всех объектов файла в новый файл. Любые несвязанные объект недоступен для приложения и не будет включен в новый файл. Запись объектов в новый файл может быть выполнена с помощью настраиваемого программы или с помощью служебной программы h5repack.
В качестве альтернативы вы также можете найти инструмент ptrepack в PyTables.
PyTables должен иметь возможность читать h5py hdf5 файлы, а инструмент ptrepack
похож на h5repack
.
Если вы хотите удалить записи из наборов данных, вам, вероятно, придется извлечь записи, которые вы хотите сохранить, и создать новый набор данных и удалить старый.
PyTables поддерживает удаление строк, однако это не рекомендуется.
Ответ 2
Если вы знаете, что конкретный набор данных будет удален в конце процесса анализа, зачем вообще хранить его в главном файле? Я бы сохранил временные данные в отдельном файле HDF5, который можно было бы отбросить после завершения анализа. Если важно связать временный набор данных внутри основного файла, просто создайте внешнюю ссылку между мастером и temp, используя H5Lcreate_external(). Внешние ссылки потребляют тривиальное пространство.