语法
1,shelve.open(filename, flag=’c’, protocol=None, writeback=False)
创建或打开一个shelve对象,默认打开方式支持读写操作。
参数filename是文件路径。
可选参数flag,默认为‘c’,如果文件不存在则创建,支持读写; ‘r’: 只读;’w’: 支持读写; ‘n’: 每次调用open()都重新创建一个文件,支持读写。
可选参数protocol:是序列化模式,默认值为None。protocol的值可以是1或2,表示以二进制的形式序列化。
可选参数writeback:默认为False。当设置为True以后,shelve将所有从文件中读取的对象缓存到内存。当close()关闭文件的时候,缓存中所有的对象会被重新写入数据文件。writeback方式有优点也有缺点:优点是减少了出错的机率,让对象的持久化对用户更加的透明;
但这种方式在数据多的时候会增加额外的内存消耗,并且在close()的时候会将缓存中的每一个对象都写入到DB带来额外的等待时间。
2.shelve.close()
同步并关闭shelve对象。
示例
import shelve
bob = dict(name='Bob Smith', age=22, job='Dev', pay=40000)
filename = './datas/people.she'
def reviewFile(filename=filename):
db = shelve.open(filename)
for (k,v) in db.items():
print(k,'=>\t',v)
def storeFile(key,value,filename=filename):
db = shelve.open(filename)
db[key] = value
db.close()
def updateFile(key,value,filename=filename):
db = shelve.open(filename=filename,flag='c',writeback=False)
try:
data = db[key]
except:
storeFile(key,value,filename)
else:
data = value
db[key] = data
finally:
db.close()
if __name__ == '__main__':
storeFile('bob',bob,filename)
amy = {'name':'Amy Lee','age':19,'job':'Dev','pay':55000}
updateFile('amy',amy,filename)
reviewFile(filename)