web-dev-qa-db-ja.com

h5pyを使用してhdf5データセットを削除する

できればh5pyを使用して、hdf5ファイルからデータセットを削除する方法はありますか?または、他のデータセットをそのままにして、データセットを上書きすることは可能ですか?

私の理解では、h5pyは5つのモードでhdf5ファイルを読み書きできます

f = h5py.File("filename.hdf5",'mode')

modeはr for read、r+読み取り/書き込み用、a読み取り/書き込み用、ただし存在しない場合は新しいファイルを作成、wは書き込み/上書き用、_w-これはwと同じですが、ファイルが既に存在する場合は失敗します。私はすべて試しましたが、どれもうまくいかないようです。

どんな提案でも大歓迎です。

18
hsnee

はい、これを行うことができます。

_with h5py.File(input,  "a") as f:
    del f[datasetname]
_

ファイルを書き込み可能モードで開く必要があります。たとえば、追加(上記)または書き込みです。

コメントの@ seppo-enarviで以前に推奨された目的が述べられているようにf.__delitem__(datasetname)関数は実装することですdel- 演算子。これを使用してデータセットを削除できます _del f[datasetname]_

32
EnemyBagJones

ファイルを開くモードで何をすればいいのかわからない。読み取り/書き込みの場合、r +を使用します。

私の知る限りでは、特にファイルのサイズが縮小しない場合でも、削除は簡単/不可能です。

しかし、コンテンツの上書きは問題ありません

f['mydataset'][:] = 0
0
agomcas

私はこれを試してみましたが、実際にファイルのサイズを小さくできる唯一の方法は、すべてを新しいファイルにコピーし、興味のないデータセットを除外することです。

fs = h5py.File('WFA.h5', 'r')
fd = h5py.File('WFA_red.h5', 'w')
for a in fs.attrs:
    fd.attrs[a] = fs.attrs[a]
for d in fs:
    if not 'SFS_TRANSITION' in d: fs.copy(d, fd)
0
Felix