我意识到一个SO用户以前曾问过这个问题,但在2009年被问到,我希望有更多关于HDF5的知识,或者新版本已经修复了这个特定问题.在此重申有关我自己问题的问题;
我有一个巨大的几何节点和元素文件,并且已经从中检索了我需要的所有有用信息.因此,在Python中,我试图保留原始文件,但删除我不需要的信息并填写其他来源的更多信息.例如,我有一个我不需要的节点数据集.但是,我需要保留相邻数据集,并从外部文件中包含有关其索引的信息.有没有办法删除这些特定的数据集?
或者,在HDF5文件中保留"放置管理员"的旧想法仍然是正确的,这样就没有人知道删除信息是多么困难?我不太担心空白区域,只要简单地删除和添加信息然后创建一个全新的文件就更快了.
注意:我正在使用H5py的'r +'进行读写.
Ümi*_*mit 15
从hdf5文件中删除整个节点(组或数据集)应该没问题.
但是,如果要回收空间,则必须运行该h5repack工具.
来自hdf5文档:
5.5.2.从文件中删除数据集并回收空间
HDF5目前不提供从文件中删除数据集或回收已删除对象占用的存储空间的简单机制.
删除数据集并回收它所使用的空间可以使用H5Ldelete函数和h5repack实用程序完成.使用H5Ldelete函数,可以从文件结构中删除指向数据集的链接.删除所有链接后,任何应用程序都无法访问数据集,并且有效地从文件中删除了该数据集.恢复未链接数据集占用空间的方法是将文件的所有对象写入新文件.应用程序无法访问任何未链接的对象,并且不会将其包含在新文件中.可以使用自定义程序或h5repack实用程序将对象写入新文件.
另外,您还可以查看PyTables的ptrepack工具.PyTables应该能够读取h5py hdf5文件并且该ptrepack工具类似于h5repack.
如果要从数据集中删除记录,则可能必须检索要保留的记录并创建新数据集并删除旧数据集.
PyTables支持删除行,但不建议这样做.