Python Data Persistence 简明教程
Python Data Persistence - Shelve Module
Python 标准库中的 shelve 模块提供了简单但有效的对象持久性机制。此模块中定义的 shelf 对象是类似于字典的对象,它持久性地存储在磁盘文件中。这会创建一个类似于 UNIX 类系统上的 dbm 数据库的文件。
shelf 字典有一些限制。仅字符串数据类型可以作为此特殊字典对象中的键,而任何可 pickle 的 Python 对象都可以作为值。
shelf 模块定义了以下三种类:
Sr.No |
Shelve Module & Description |
1 |
Shelf 这是 shelf 实现的基础类。它使用类似字典的对象进行初始化。 |
2 |
BsdDbShelf 这是 Shelf 类的子类。传递给其构造函数的 dict 对象必须支持 first()、next()、previous()、last() 和 set_location() 方法。 |
3 |
DbfilenameShelf 这也是 Shelf 的子类,但将其构造函数中的 filename 作为参数接受,而不是 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 对象提供以下方法:
Sr.No. |
Methods & Description |
1 |
close() 同步并关闭持久性 dict 对象。 |
2 |
sync() 如果 shelf 使用 writeback 设置为 True 打开,则回写缓存中的所有条目。 |
3 |
get() 返回与键关联的值 |
4 |
items() 元组列表——每个元组都是键值对 |
5 |
keys() list of shelf keys |
6 |
pop() 移除指定键并返回相对应的值。 |
7 |
update() 从其他字典/迭代中对内容进行更新 |
8 |
values() list of shelf values |
若要访问内容中特定键的值 −
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]
若要将其他字典与内容的项目合并,请使用 update() 方法。
d={'salary':10000, 'designation':'manager'}
s.update(d)
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]