我正在运行一个 Python 程序,它shelve使用pickle. 运行这个程序后,有时我得到一个输出文件,a.data但有时我得到三个输出文件a.data.bak,a.data.dir和a.data.dat.
这是为什么?
这里有相当多的间接性。仔细跟着我。
该模块是在模块shelve之上实现的。该模块充当 3 (*不同的特定 DBM 实现的外观,它将在创建新数据库时选择第一个可用的模块,顺序如下:dbm
dbm.gnu, GNU DBM 库的 Python 模块;如果您需要它在基本dbm模块上提供的额外功能,您可以直接使用它(它允许您按存储顺序迭代键并“打包”数据库以释放已删除对象的空间)。dbm.ndbm,一个使用ndbmBSD DB 和 GNU DBM 库(在 Python 编译时选择)的代理模块。dbm.dumb,一个纯python实现。正是这种选择范围使shelve文件看起来在不同平台上增加了额外的扩展名。
该dbm.dumb模块是添加.bak,.dat和.dir扩展的模块:
打开一个dumbdbm 数据库并返回一个dumbdbm 对象。filename 参数是数据库文件的基本名称(没有任何特定的扩展名)。创建dumbdbm 数据库时,会创建带有
.dat和.dir扩展名的文件。
当新的索引字典被提交以对数据结构进行更改时(当添加新键、删除键或调用or时),该.dir文件将被移至。.bak.sync().close()
这意味着其他三个选项anydbm在您的平台上不可用。
其他格式可能会给您其他扩展。该dbm模块可能使用或.dir,具体取决于该模块使用的库。.pag.db
(* Python 2 有四个dbm 模块,它将默认为不推荐使用的dbhash模块,而后者又构建在bsddb模块之上。这些都从 Python 3 中删除。