Ich versuche, eine Untergruppe, die ich in einer HDF5-Datei geschrieben habe mit h5py in Python zu löschen. Zum Beispiel nach der Dokumentation, die Untergruppe „MyDataSet“ genannt kann mit gelöscht werden:Löschen Untergruppe von HDF5-Datei in Python
del subgroup["MyDataset"]
habe ich es und effektiv die Untergruppe ist nicht mehr erreichbar. Die Dateien werden jedoch nicht verkleinert. Meine Frage, ist es möglich, den Speicherplatz von gelöschten Untergruppen mit h5py wiederherzustellen, ohne die restlichen Untergruppen in eine komplett neue Datei umschreiben zu müssen? Im Folgenden werde ich ein kleines Beispiel zu geben, die zeigen, was ich sage:
import numpy as np
import h5py
myfile = h5py.File('file1.hdf5')
data = np.random.rand(int(1e6))
myfile.create_dataset("MyDataSet", data=data)
myfile.close()
Dann öffne ich die Datei und den vorherigen Eintrag entfernen:
myfile = h5py.File('file1.hdf5')
del myfile["MyDataSet"]
und wenn Sie versuchen, die Daten zu erhalten mit:
myfile["MyDataSet"].value
werden Sie feststellen, dass die Daten nicht mehr zugänglich sind. Wenn Sie jedoch die Größe der Datei überprüfen, bleibt sie vor und nach dem Aufruf von del konstant.
Oh. Aha. Ich habe vergessen, die Datei zu schließen. Ich bin eigentlich nicht sehr an die Verwendung von "mit" gewöhnt, aber ich mag die Art und Weise, wie Sie es tun. Solange ich verstehe, wird der With immer den Aufruf der __exit__ Methode erzwingen, was für h5py.File die close() zu sein scheint. Vielen Dank für Ihr schönes Beispiel! – Alejandro
Ja, das stimmt. Die '__exit__' Methode ruft' close() 'auf. "Ab h5py 2.0 müssen Dateien manuell geschlossen werden, indem die Methode" close "aufgerufen oder das Dateiobjekt als Kontextmanager verwendet wird." (aus [Was ist neu in h5py Version 2.0] (http://docs.h5py.org/en/latest/whatsnew/2.0.html)). – unutbu