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}