Python 对象持久化 (shelve)
Python 标准库中的 shelve 模块是一个简单而有效的持久化数据存储工具,在不需要关系数据库解决方案时可以使用。该模块中定义的 shelf 对象是一个类似字典的对象,持久存储在磁盘文件中。这会创建一个类似于类 Unix 系统上 dbm 数据库的文件。只有字符串数据类型可以用作此特殊字典对象的键,而任何可 pickle 的对象都可以用作值。
shelve 模块定义了以下三个类:
| 序号 | 模块及描述 |
|---|---|
| 1 | Shelf 这是 shelf 实现的基类。它使用类似字典的对象进行初始化。 |
| 2 | BsdDbShelf 这是 Shelf 类的子类。传递给其构造函数的字典对象必须支持 first()、next()、previous()、last() 和 set_location() 方法。 |
| 3 | DbfilenameShelf 这也是 Shelf 的子类,但它接受文件名作为其构造函数的参数,而不是字典对象。 |
创建 Shelf 对象最简单的方法是使用 shelve 模块中定义的 open() 函数,它返回一个 DbfilenameShelf 对象。
open(filename, flag = 'c', protocol=None, writeback = False)
文件名参数被分配给创建的数据库。
flag 参数的默认值为 'c',表示读写访问。其他标志为 'w'(只写)、'r'(只读)和 'n'(新的读写)。
protocol 参数表示 pickle 协议,writeback 参数默认为 false。如果设置为 true,则缓存访问的条目。每次访问都会调用 sync() 和 close() 操作,因此进程可能会变慢。
以下代码创建了一个数据库并在其中存储字典条目。
import shelve
s = shelve.open("test")
s['name'] = "Ajay"
s['age'] = 23
s['marks'] = 75
s.close()这将在当前目录中创建 test.dir 文件,并将键值数据以哈希形式存储。Shelf 对象具有以下可用方法:
| 序号 | 方法及描述 |
|---|---|
| 1 | close() 同步并关闭持久化字典对象。 |
| 2 | sync() 如果 shelf 以 writeback 设置为 True 打开,则写回缓存中的所有条目。 |
| 3 | get() 返回与键关联的值。 |
| 4 | items() 元组列表——每个元组都是键值对。 |
| 5 | keys() shelf 键的列表。 |
| 6 | pop() 删除指定的键并返回相应的值。 |
| 7 | update() 从另一个字典/可迭代对象更新 shelf。 |
| 8 | values() shelf 值的列表。 |
访问 shelf 中特定键的值。
>>> s=shelve.open('test')
>>> s['age']
23
>>> s['age']=25
>>> s.get('age')
25items()、keys() 和 values() 方法返回视图对象。
>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
>>> list(s.keys())
['name', 'age', 'marks']
>>> list(s.values())
['Ajay', 25, 75]从 shelf 中删除键值对。
>>> s.pop('marks')
75
>>> list(s.items())
[('name', 'Ajay'), ('age', 25)]请注意,marks-75 的键值对已被删除。
要将另一个字典的项目与 shelf 合并,请使用 update() 方法。
>>> d={'salary':10000, 'designation':'manager'}
>>> s.update(d)
>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]在本文中,我们学习了 shelve 模块,它提供了一种方便的机制来存储持久化字典对象。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP