shelve 模块以字典(散列)的方式存储或读取序列化对象,即它以一个“key-value(键-值)”形式保存数据,其中的 value(值)是一个可以用 pickle 模块序列化的任何对象(类类型、递归数据类型),其中的 key(键)可以是任意字符串。value 被 pickle 序列化和反序列化并被写入由 dbm 模块创建和管理的数据库,当不需要关系数据库时,shelve 模块可以用作 Python 对象的简单持久的存储选项。 通过 shelve 模块的函数 open()打开一个持久化的字典的格式如下:
shelve.open(filename, flag='c', protocol=None, writeback=False)
如果可选参数 writeback 设置为 True,则所有访问的条目会缓存在内存中,并可通过 sync()和close()写回到文件中。 另外,如果参数 filename 没有文件扩展名,则函数 open()会创建后缀为.bck、.dat、.dir 的三个文件。 下面程序将两个对象(obj 和 obj2)分别用两个键“zhang”和“wang”保存到 shelve 对象 db 中:
import shelve
obj = {'name':'Zhang','score':90.5}
obj2 = ['王',60.5,30]
db = shelve.open('shelf.db')
db['zhang'] = obj
db['wang'] = obj2
db.close()
重新打开上面文件并根据 key(键)读取内容到对象 obj 和 obj2 中:
import shelve
db = shelve.open('shelf.db')
obj = db['zhang']
obj2 = db['wang']
print(obj)
print(obj2)
db.close()
输出:
{'name': 'Zhang', 'score': 90.5}
['王', 60.5, 30]
|