2016-05-04 16 views
0

棚の中の要素を削除すると、データが残っています。 popdelclearで試しましたが、結果は同じです。残りのデータはdat拡張子にファイルされています。したがって、メソッドを使用した後でさえ、datファイルのサイズは0Koではありません。私がしようと試みたものだシェルフ内のデータを削除する最もクリーンな方法は何ですか?

import shelve 
test = shelve.open('test') 
test['a']=1 
#test.pop('a') 
#del test['a'] 
#test.clear() 
test.close() 

は完全に棚のデータを削除する方法はありますか?

+0

shelveをファイルとして開き、 '.truncate()'を呼び出しますか? –

+0

@WayneWernerそれは 'truncate'でファイルを簡単に完全に消去できるということです。しかし、私はちょうど完全に、適切に1つのユニークなデータを削除したい場合は、より困難になります。 – Morgan

答えて

0

シェルフ内のすべてのデータを削除することは、ファイル内のすべてのデータを削除することとは異なります。

明らかにshelveは(少なくとも私にとっては)約13kのデータが入っているデータベースファイルを作成します。以下を試してください:

import os 
import shelve 

with shelve.open('fnord') as db: 
    db['color'] = 'blue, no yelloowwwww!' 
    print(list(db.keys())) 

print(os.stat('fnord').st_size) 

with shelve.open('fnord') as db: 
    db.clear() 
    print(list(db.keys())) 

print(os.stat('fnord').st_size) 

棚にはキーはありませんが、まだサイズがあります。 16進エディタでファイルを編集すると、たくさんのデータがあることがわかりますが、おそらくデータベースファイル形式と関係があります。

+0

私はそれを試しても問題は同じです。ファイルサイズが決して0kにならないことを理解しましたが、私が理解していないことは、あなたのスクリプトを実行するたびにファイルのサイズがまだ大きくなっている理由です。それは常にほぼ13kではないはずですか? – Morgan

0

棚からオブジェクトを削除するには、del d[key]が正しい方法です。しかし、あなたが棚にあるすべてのオブジェクトを削除すると、それは空のdictがあることを意味します。だから、あなたの棚のファイルには、空のピクルスが含まれています。この理由で、シイルサイズは0ではありません。

関連する問題