簡體   English   中英

從HDF5文件中刪除信息

[英]Deleting information from an HDF5 file

我意識到一個SO用戶以前曾問過這個問題,但在2009年被問到,我希望有更多關於HDF5的知識,或者新版本已經修復了這個特定問題。 在此重申有關我自己問題的問題;

我有一個巨大的幾何節點和元素文件,並且已經從中檢索了我需要的所有有用信息。 因此,在Python中,我試圖保留原始文件,但刪除我不需要的信息並填寫其他來源的更多信息。 例如,我有一個我不需要的節點數據集。 但是,我需要保留相鄰數據集,並從外部文件中包含有關其索引的信息。 有沒有辦法刪除這些特定的數據集?

或者在HDF5文件中保留“放置管理員”的舊想法仍然是真的,這樣就沒有人知道刪除信息是多么困難? 我不太擔心空白區域,只要簡單地刪除和添加信息然后創建一個全新的文件就更快了。

注意:我正在使用H5py的'r +'進行讀寫。

從hdf5文件中刪除整個節點(組或數據集)應該沒問題。
但是,如果要回收空間,則必須運行h5repack工具。

來自hdf5文檔

5.5.2。 從文件中刪除數據集並回收空間

HDF5目前不提供從文件中刪除數據集或回收已刪除對象占用的存儲空間的簡單機制。

刪除數據集並回收它所使用的空間可以使用H5Ldelete函數和h5repack實用程序完成。 使用H5Ldelete函數,可以從文件結構中刪除指向數據集的鏈接。 刪除所有鏈接后,任何應用程序都無法訪問數據集,並且有效地從文件中刪除了該數據集。 恢復未鏈接數據集占用空間的方法是將文件的所有對象寫入新文件。 應用程序無法訪問任何未鏈接的對象,並且不會將其包含在新文件中。 可以使用自定義程序或h5repack實用程序將對象寫入新文件。

另外,您還可以查看PyTables的ptrepack工具。 PyTables應該能夠讀取h5py hdf5文件,而ptrepack工具類似於h5repack

如果要從數據集中刪除記錄,則可能必須檢索要保留的記錄並創建新數據集並刪除舊數據集。
PyTables支持刪除行,但不建議這樣做。

如果您知道在分析過程結束時將刪除特定數據集,為什么要將其保留在主文件中? 我會將臨時數據存儲在單獨的HDF5文件中,該文件可在分析完成后丟棄。 如果在主文件中鏈接臨時數據集很重要,只需使用H5Lcreate_external()在master和temp之間創建一個外部鏈接。 外部鏈接占用了大量的空間。

在HDF5 1.10及更高版本中,存在文件空間管理機制。 它可以通過在H5F.create中指定fcpl(文件創建屬性列表)來實現

您會注意到的一個重要更改是,第一次導入后的文件在第一次導入時會更大(以Kb為單位)。 但在此之后,您的文件大小最終會變小(在回收過程之后)。

您可以使用h5stat工具監視HDF5文件中的可用空間

h5stat -S filename

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM