gpt4 book ai didi

python - 为什么 python 中的 shelve 模块有时会创建具有不同扩展名的文件?

转载 作者:太空狗 更新时间:2023-10-29 17:39:04 26 4
gpt4 key购买 nike

我正在运行一个 Python 程序,该程序在 pickle 之上使用 shelve 模块。运行这个程序后,有时我得到一个输出文件 a.data 但有时我得到三个输出文件 a.data.bak, a.data .dira.data.dat

这是为什么?

最佳答案

这里有相当多的间接性。关注我。

shelve 模块是在 dbm module 之上实现的.该模块充当 3(* 不同特定 DBM 实现的外观,它将在创建新数据库时选择第一个可用的模块,顺序如下:

  1. dbm.gnu , GNU DBM 库的 Python 模块;如果您需要它在基本 dbm 模块上提供的额外功能,您可以直接使用它(它允许您按存储顺序迭代键并“打包”数据库以释放已删除对象的空间) .
  2. dbm.ndbm ,一个使用 ndbm、BSD DB 和 GNU DBM 库的代理模块(选择 when Python is compiled)。
  3. dbm.dumb ,纯 Python 实现。

正是这种选择范围使得 shelve 文件在不同的平台上似乎增加了额外的扩展。

dbm.dumb 模块是添加了.bak.dat.dir 的模块扩展:

Open a dumbdbm database and return a dumbdbm object. The filename argument is the basename of the database file (without any specific extensions). When a dumbdbm database is created, files with .dat and .dir extensions are created.

.dir 文件被移动到 .bak,因为新的索引字典被提交用于对数据结构所做的更改(添加新键、删除键时,或调用 .sync().close() )。

这意味着 other anydbm 的三个选项在您的平台上不可用。

其他格式可能会给您其他扩展。 dbm 模块可以使用 .dir.pag.db,具体取决于所使用的库模块。


(* Python 2 有 四个 dbm 模块,它默认为已弃用的 dbhash module ,它又构建在 bsddb module 之上。这些都从 Python 3 中删除了。

关于python - 为什么 python 中的 shelve 模块有时会创建具有不同扩展名的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16171833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com