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} 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值