writeback 默认值是 False,即“不可回写”,也就是说,一个 key-value 中的 value 是不可以修改的,但是可以将该 key 的值替换成其他的值。例如:
import shelve db = shelve.open('shelf.db') #打开一个文件 #db 打开时 writeback=False db['wang'].append(78) #不可以修改 key-value 中的 value print(db['wang']) db['wang'] = [34,78,1,100] #但该 key 的 value 可替换成其他的 value print(db['wang']) db.close()
输出:
['王', 60.5, 30] [34, 78, 1, 100]
如果打开文件时,设置 writeback=True,那么就可以修改 key-value 中的 value:
import shelve db = shelve.open('shelf.db',writeback=True) #打开一个文件 #db 打开时 writeback=True db['wang'].append(111) #可以修改 key-value 中的 value print(db['wang']) db.sync() #如果 writeback=True,那么可以对内存 db 进行修改,高速缓存中的所有条目写回 #文件中该方法会自动被 close()方法调用
输出:
[34, 78, 1, 100, 111]
删除一个不存在的键:
del db['zhang'] #删除一个键 print(db['zhang']) #抛出 KeyError 异常 db.close()
将抛出 KeyError 类型的异常:
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-26-f0ad236d1819> in <module>() ----> 1 del db['zhang'] #删除一个键 2 print(db['zhang']) #抛出 KeyError 异常 3 db.close() …
可以用 with 语句,以防止忘记调用 sync()方法和 close()方法。例如:
import shelve with shelve.open('shelf2.db') as s: s['zhang'] = { '名字': 'Zhang', '分数': 90.5, '年龄': 23, } with shelve.open('shelf2.db') as s: print(s['zhang'])
输出:
{'名字': 'Zhang', '分数': 90.5, '年龄': 23}