6

http://code.google.com/p/filecache/でshelveを使用していくつかの単体テストを作成し、python 2はshelve.open()で指定したファイル名を正確に保存しますが、python3では3つの異なるファイル「bak」を取得します。 「dat」と「dir」。したがって、テストを開始する前に、これらのファイルを消去したいのですが、ファイル名または拡張子について保証があるかどうかはわかりません。

名前がわかっている場合、どうすれば棚を消去できますか?

4

2 に答える 2

8

取得する拡張機能は、使用されているデータベースバックエンドによって異なります。Python2とPython3ではデフォルトが異なる可能性がありますが、環境で使用できるデータベースインターフェイスも異なる可能性があります。

したがって、特定の実装、つまりBsdDbShelfまたはDbfilenameShelfを使用しない限り、拡張機能に対する保証はありません。おそらく、tempfileによって作成された一時ディレクトリ内のファイルを指定してから、whileディレクトリを削除することができます。

于 2011-02-11T08:51:18.993 に答える
2

tempFileオブジェクトとdict[]オブジェクトはモジュール間で永続化できないため、shelveを使用します。ご存知のように、.clear()を呼び出しても、ディスク上の永続オブジェクトからコンテンツがクリアされず、終了後にデータが入力されたr+wファイルがディスクに残ります。(解放後使用の脆弱性と同様)使用が終了したら、シェルフを削除できます。

import os
import shelve

shelve_name = 'shelve_name'
shelve_contents = shelve.open(shelve_name, flag='c', protocol=None, writeback=False)

shelve_file = (os.path.join(os.getcwd(), shelve_name))
os.remove(shelve_file)
于 2017-03-16T18:28:49.037 に答える