Eliminar información de un archivo HDF5

Me doy cuenta de que un usuario de SO había formulado esta pregunta anteriormente, pero me la hicieron en 2009 y esperaba que hubiera más conocimiento de HDF5 o que las versiones más recientes hubieran solucionado este problema en particular. Para reafirmar la pregunta aquí sobre mi propio problema;

Tengo un archivo gigantesco de nodos y elementos de una gran geometría y ya he recuperado toda la información útil que necesito. Por lo tanto, en Python, estoy tratando de mantener el archivo original, pero borro la información que no necesito y completa más información para otras fonts. Por ejemplo, tengo un conjunto de datos de nodos que no necesito. Sin embargo, necesito mantener el conjunto de datos adyacente e incluir información sobre sus índices de un archivo externo. ¿Hay alguna manera de eliminar estos conjuntos de datos específicos?

¿O es que la vieja idea de tener “marcadores de posición” en el archivo HDF5 sigue siendo válida, de modo que nadie sabe cómo / molesta quitar la información? No estoy demasiado preocupado por el espacio vacío, siempre y cuando sea más rápido simplemente eliminar y agregar información y luego crear un archivo completamente nuevo.

Nota: Estoy usando ‘r +’ de H5py para leer y escribir.

La eliminación de nodos completos (grupos o conjuntos de datos) de un archivo hdf5 no debería ser un problema.
Sin embargo, si desea recuperar el espacio, debe ejecutar la herramienta h5repack .

De los documentos hdf5 :

5.5.2. Eliminar un conjunto de datos de un archivo y recuperar espacio

HDF5 no proporciona en este momento un mecanismo fácil para eliminar un conjunto de datos de un archivo o para reclamar el espacio de almacenamiento ocupado por un objeto eliminado.

La eliminación de un conjunto de datos y la recuperación del espacio que utilizó se puede hacer con la función H5Ldelete y el progtwig de utilidad h5repack. Con la función H5Ldelete, los enlaces a un conjunto de datos se pueden eliminar de la estructura de archivos. Una vez que se han eliminado todos los enlaces, el conjunto de datos se vuelve inaccesible para cualquier aplicación y se elimina de manera efectiva del archivo. La forma de recuperar el espacio ocupado por un conjunto de datos no vinculado es escribir todos los objetos del archivo en un nuevo archivo. Cualquier objeto no vinculado no es accesible para la aplicación y no se incluirá en el nuevo archivo. La escritura de objetos en un archivo nuevo se puede hacer con un progtwig personalizado o con el progtwig de utilidad h5repack.

Alternativamente, también puede echar un vistazo a la herramienta de ptrepack de PyTables . PyTables debería poder leer los archivos h5py hdf5 y la herramienta ptrepack es similar a la h5repack .

Si desea eliminar registros de un conjunto de datos, es probable que tenga que recuperar los registros que desea conservar y crear un nuevo conjunto de datos y eliminar el antiguo.
PyTables admite la eliminación de filas, sin embargo, no se recomienda.

Si sabe que un conjunto de datos en particular se eliminará al final de un proceso de análisis, ¿por qué mantenerlo en el archivo maestro? Almacenaría los datos temporales en un archivo HDF5 separado que podría descartarse después de que se completara el análisis. Si es importante vincular el conjunto de datos temporal dentro del archivo maestro, simplemente cree un enlace externo entre el maestro y la temperatura usando H5Lcreate_external (). Los enlaces externos consumen una cantidad trivial de espacio.

En HDF5 1.10 y superior, hay un mecanismo de gestión de espacio de archivos . Se puede implementar especificando fcpl (Lista de propiedades de creación de archivos) en H5F.create .

Un cambio importante que notaría es que el archivo después de su primera importación sería un poco más grande (en Kb) en la primera importación. Pero después de eso, el tamaño del archivo sería más pequeño (después del proceso de reclamación).

Puede controlar el espacio libre en sus archivos HDF5 usando la herramienta h5stat

 h5stat -S filename