On this page
11.9. gdbm — GNU 对 dbm 的重新解释
该模块与dbm模块非常相似,但是使用gdbm
来提供一些附加Function。请注意,gdbm
和dbm
创建的文件格式不兼容。
gdbm模块提供了 GNU DBM 库的接口。 gdbm
对象的行为类似于 Map(字典),不同之处在于键和值始终是字符串。打印gdbm
对象不会打印键和值,并且不支持items()
和values()
方法。
该模块定义以下常量和函数:
exception
gdbm.
error
- 针对
gdbm
特定的错误(例如 I/O 错误)引发。对于一般的 Map 错误(例如指定不正确的键),将引发KeyError。
- 针对
gdbm.
open
(* filename * [,* flag * [,* mode *]])- 打开一个
gdbm
数据库并返回一个gdbm
对象。 * filename *参数是数据库文件的名称。
- 打开一个
可选的* flag *参数可以是:
Value | Meaning |
---|---|
'r' |
打开现有数据库以只读(默认) |
'w' |
打开现有数据库进行读写 |
'c' |
打开数据库进行读写,如果不存在则创建数据库 |
'n' |
始终创建一个新的空数据库,以供读取和写入 |
可以在标志后面附加以下其他字符,以控制如何打开数据库:
Value | Meaning |
---|---|
'f' |
以快速模式打开数据库。写入数据库将不会同步。 |
's' |
同步模式。这将导致对数据库的更改立即写入文件中。 |
'u' |
不要锁定数据库。 |
并非所有标志都对gdbm
的所有版本均有效。模块常数open_flags
是支持的标志字符的字符串。如果指定了无效标志,则会引发异常error。
可选的* mode *参数是文件的 Unix 模式,仅在必须创建数据库时使用。默认为八进制0666
。
除了类似于字典的方法外,gdbm
对象还具有以下方法:
gdbm.
firstkey
( )- 使用此方法和nextkey()方法可以遍历数据库中的每个键。遍历由
gdbm
的内部哈希值排序,并且不会按键值排序。此方法返回开始键。
- 使用此方法和nextkey()方法可以遍历数据库中的每个键。遍历由
gdbm.
nextkey
(* key *)- 返回遍历中* key *之后的键。以下代码将打印数据库
db
中的每个键,而不必在包含它们的内存中创建列表:
- 返回遍历中* key *之后的键。以下代码将打印数据库
k = db.firstkey()
while k != None:
print k
k = db.nextkey(k)
gdbm.
reorganize
( )- 如果您执行了许多删除操作,并希望缩小
gdbm
文件使用的空间,则此例程将重新组织数据库。gdbm
不会pass使用这种重组来缩短数据库文件的长度;否则,删除的文件空间将保留并在添加新的(键,值)对时重复使用。
- 如果您执行了许多删除操作,并希望缩小
gdbm.
sync
( )- 在快速模式下打开数据库后,此方法将强制将所有未写入的数据写入磁盘。
gdbm.
close
( )- 关闭
gdbm
数据库。
- 关闭