Pythonでh5pyを使用してHDF5ファイルに書き込んだサブグループを削除しようとしています。たとえば、ドキュメントによると、「MyDataset」と呼ばれるサブグループを削除することができます。PythonのHDF5ファイルからサブグループを削除
del subgroup["MyDataset"]
私はそれをやったし、効果的にサブグループにはアクセスできません長いです。ただし、ファイルのサイズは縮小されません。私の質問は、完全に新しいファイルに残りのサブグループを書き換えることなく、h5pyを使って削除されたサブグループからスペースを回復することは可能ですか?その後
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()
私は、ファイルを開いて、以前のエントリを削除:
myfile = h5py.File('file1.hdf5')
del myfile["MyDataSet"]
を、あなたが使用してデータを取得しようとする場合:私は小さな例を提供下に私が言っているものを示している
myfile["MyDataSet"].value
あなたは、データにアクセスできなくなったことに気付きます。ただし、ファイルのサイズを確認すると、delの呼び出し前後で一定のままです。ドキュメントから
ああそうですか。私はファイルを閉じるのを忘れた。私は実際には "with"の使用にあまり慣れていませんが、あなたがそれをやる方法は本当に好きです。私が理解している限り、withは常に__exit__メソッドの呼び出しを強制します。これはh5py.Fileではclose()と思われます。あなたの素晴らしい例をありがとうございました! – Alejandro
はい、そうです。 '__exit__'メソッドは' close() 'を呼び出します。 "h5py 2.0以降、ファイルを手動で閉じるには、" close "メソッドを呼び出すか、ファイルオブジェクトをコンテキストマネージャーとして使用する必要があります。" ([h5pyバージョン2.0の新機能](http://docs.h5py.org/ja/latest/whatsnew/2.0.html)から)。 – unutbu