shelve
の上でモジュールを使用する Python プログラムを実行していますpickle
。このプログラムを実行した後、1 つの出力ファイルa.data
が として得られることもありますが、3 つの出力ファイルがa.data.bak
、a.data.dir
およびとして得られることもありa.data.dat
ます。
何故ですか?
ここにはかなりの間接性があります。注意深く私に従ってください。
モジュールは、モジュールshelve
の上に実装されます。このモジュールは 3 (*異なる特定の DBM 実装のファサードとして機能し、新しいデータベースを作成するときに使用可能な最初のモジュールを次の順序で選択します。dbm
dbm.gnu
、GNU DBM ライブラリの Python モジュール。dbm
基本モジュールに対して提供される追加機能が必要な場合は、直接使用します (格納された順序でキーを反復処理し、データベースを「パック」して、削除されたオブジェクトからスペースを解放できます)。dbm.ndbm
ndbm
、 BSD DB および GNU DBM ライブラリのいずれかを使用するプロキシ モジュール( Python のコンパイル時に選択)。dbm.dumb
、純粋な Python 実装です。shelve
ファイルがさまざまなプラットフォームで余分な拡張子を成長させているように見えるのは、この選択の範囲です。
dbm.dumb
モジュールは、.bak
、.dat
および.dir
拡張機能を追加するものです。
dumpdbm データベースを開き、dumpdbm オブジェクトを返します。filename 引数は、データベース ファイルのベース名です (特定の拡張子なし)。dumpdbm データベースが作成されると、拡張子が
.dat
およびのファイルが作成されます。.dir
.dir
ファイルは、新しいインデックス dict がデータ構造に加えられた変更に対してコミットされるときに移動され.bak
ます (新しいキーを追加するとき、キーを削除するとき、または または を呼び出すとき.sync()
) .close()
。
これは、他の3 つのオプションanydbm
がプラットフォームで利用できないことを意味します。
他の形式では、他の拡張子が得られる場合があります。dbm
モジュールは、そのモジュールに使用されたライブラリに応じて、 または を使用する場合があり.dir
ます.pag
。.db
(* Python 2 には4 つのdbm モジュールがあり、デフォルトで deprecated dbhash
moduleになり、これはbsddb
moduleの上に構築されました。これらは両方とも Python 3 から削除されました。