Python 数据持久化 - Shelve 模块
Python 标准库中的 shelve 模块提供了简单而有效的对象持久化机制。 该模块中定义的 shelf 对象是一种类似字典的对象,它持久存储在磁盘文件中。 这将创建一个类似于 UNIX 类系统上的 dbm 数据库的文件。
shelf 字典有一定的限制。 在这个特殊的字典对象中,只能将字符串数据类型用作键,而任何可 picklable Python 对象都可以用作值。
shelve 模块定义了如下三个类 −
Sr.No | Shelve 模块 & 描述 |
---|---|
1 |
Shelf 这是 shelf 实现的基类。 它是用类似 dict 对象初始化的。 |
2 |
BsdDbShelf 这是 Shelf 类的子类。 传递给其构造函数的字典对象必须支持 first()、next()、previous()、last() 和 set_location() 方法。 |
3 |
DbfilenameShelf 这也是 Shelf 的子类,但接受文件名作为其构造函数的参数,而不是 dict 对象。 |
shelve 模块中定义的 open() 函数返回一个 DbfilenameShelf 对象。
open(filename, flag='c', protocol=None, writeback=False)
filename 文件名参数被分配给创建的数据库。 flag 参数的默认值为"c",用于读取/写入访问。 其他标志是"w"(只写)"r"(只读)和"n"(新的可读/写)。
序列化本身由 pickle 协议管理,默认为 none。 最后一个参数 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() 从另一个 dict/iterable 更新 shelf |
8 |
values() shelf 值列表 |
访问 shelf 中特定键的值 −
s=shelve.open('test') print (s['age']) #this will print 23 s['age']=25 print (s.get('age')) #this will print 25 s.pop('marks') #this will remove corresponding k-v pair
与在内置字典对象中一样,items()、keys() 和 values() 方法返回视图对象。
print (list(s.items())) [('name', 'Ajay'), ('age', 25), ('marks', 75)] print (list(s.keys())) ['name', 'age', 'marks'] print (list(s.values())) ['Ajay', 25, 75]
要将另一个字典的项目与 shelf 合并,请使用 update() 方法。
d={'salary':10000, 'designation':'manager'} s.update(d) print (list(s.items())) [('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]