python基础教程_学习笔记18:标准库:一些最爱——shelve

标准库:一些最爱

shelve

Shelve唯一有趣的函数是open。在调用它的时候(使用文件名作为参数),它会返回一个Shelf对象,可以用它来存储内容。只需要把它当作普通的字典(但是键一定要作为字符串)来操作即可,在完成工作之后,调用它的close方法。

 

意识到shelve.open函数返回的对象并不是普通的映射是很重要的。

>>> import shelve

>>> s=shelve.open('a.txt')

>>> s['x']=['a','b','c']

>>> s['x'].append('d')

>>> s['x']

['a', 'b', 'c']

 

‘d’去哪了?

当你在shelf对象中查找元素的时候,这个对象都会根据已经存储的版本进行重新构建,当你将元素赋给某个键的时候,它就被存储了。

上例中的操作如下:

列表[‘a’,’b’,’c’]存储在键x下;

获得存储的表示,并且根据它来创建新的列表,而’d’被添加到这个副本中。修改的版本没有被保存。

最终,再次获得原始版本——没有’d’。

为了正确地使用shelve模块修改存储的对象,必须将临时变量绑定到获得的副本上,并且在它被修改后重新存储这个副本。

>>> temp=s['x']

>>> temp.append('d')

>>> s['x']=temp

>>> s['x']

['a', 'b', 'c', 'd']

还有个解决办法,将open函数的writeback参数设为True。如果这样做,所有从shelf读取或者赋值到shelf的数据结构都会保存在内存(缓存)中,并且只有在关闭shelf的时候才写回到磁盘中。如果处理的数据不大,并且不想考虑这些问题,那么将writeback设为True(确保在最后关闭了shelf)的方法还是不错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

signjing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值