Python 中 shelve 模块(下)

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} 
上一篇:shelve模块


下一篇:Array