2016-09-12 16 views
2

h5pyデータセットの古いアイテムの1つを操作し、古いものを削除して新しいアイテムを追加します。h5pyデータセットのアイテムは削除されますが、ファイルサイズは2倍になります

私は__delitem__()関数を使用して古いデータセット項目を削除します。 f5pyファイルのkeysからその項目を削除したようです。しかし、ファイルサイズは2倍になります。実際にh5pyデータセットの項目を削除するためのアドバイスはありますか?どうもありがとう。

これは私のコードです:元h5pyファイルの

import numpy as np 
import h5py 

# suppose I have hdf5 file names stored in: h5_files 

for name in h5_files: 
    roll_images = [] 
    with h5py.File(name, "a") as f: 
     x = f["x_data"] 
     np_x = np.array(x) 

     # do something to np_x, but keep dtype and shape the same as x. 

     f.__delitem__("x_data") 
     f.create_dataset("x_data", data = np_x) 

サイズは次のとおりです。997.3メガバイト。しかし、上記のコードを実行した後に、ファイルサイズが約2倍である:2.0ギガバイト

+1

同様の質問がここで尋ねられました:http://stackoverflow.com/questions/1124994/removing-data-from-a-hdf5-file。 "repack"ツールを使用して、ファイル内の領域を回復することができます。 –

答えて

1

私は間違っているかもしれないが、私は、データセットの削除は、実際にはデータセットの名前が削除されますが、データがまだファイルに残っていると思います。それはファイルサイズの倍増を説明します。

本当にデータセットを削除する必要がある場合は、データセット以外のすべてを新しいhdf5ファイルにコピーします。私はこれが同じことを達成するために見つけられた唯一の回避策であることを覚えています。

注:f.__delitem__("x_data")の代わりにdel f["x_data"]を使用できます。

+0

はい、データセット以外のすべてを新しいh5pyファイルにコピーすると、すべて正常になります。その理由は、私は実際のデータではなく、データセットの名前だけを削除するということです。私は 'del f [" x_data "]'を使用しようとしますが、この問題も同様に発生します。 –

+0

はい、それは私が言ったことです。 '' __delitem__''と '' del''の使い方は同じですが、 '' del''を使うことだけの提案でしたが、それはもっと良く見えますが、それだけです。私は本当にあなたがhdf5ファイルからデータを削除する方法がないと思います。 – ziky