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.ndbmndbm、 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 dbhashmoduleになり、これはbsddbmoduleの上に構築されました。これらは両方とも Python 3 から削除されました。