Python基础(14)——shelve模块的详述(shelve.open的详细用法)

一、在已有json和pickle的情况下,为什么用shelve?

使用json或者 pickle 持久化数据,能 dump 多次,但 load 的话只能取到最新的 dump,因为先前的数据已经被后面 dump 的数据覆盖掉了。如果想要实现 dump 多次不被覆盖,可以使用 shelve 模块。

二、shelve模块的特点

shelve 是一个简单的数据存储方案,类似 key-value 数据库,可以很方便的保存 python 对象,其内部是通过 pickle 协议来实现数据序列化。shelve 只有一个 open() 函数,这个函数用于打开指定的文件(一个持久的字典),然后返回一个 shelf 对象。shelf 是一种持久的、类似字典的对象。

  • shelve 模块可以看做是 pickle 模块的升级版,可以持久化所有 pickle 所支持的数据类型,而且 shelve 比 pickle 提供的操作方式更加简单、方便;
  • 在 shelve 模块中,key 必须为字符串,而值可以是 python 所支持的数据类型。
  • shelve 只提供给我们一个 open 方法,是用 key 来访问的,使用起来和字典类似。可以像字典一样使用get来获取数据等。
  • shelve 模块其实用 anydbm 去创建DB并且管理持久化对象的。

三、shelve模块的用法

1、持久化存储

import shelve
def member_info(name, age):
   print("Member info:", name, age)
   
name = ['Jack', 'Maxwell', 'Tom']
info = {'name':'Maxwell', 'age':18}
   
with shelve.open('demo') as data:
    data['name'] = name   #持久化列表
    data['info'] = info   #持久化字典
    data['func'] = member_info

 代码执行后会在当前目录下生成三个文件:

其中 demo.bak 和 demo.dir 文件内容相同,三个文件的内容显示如下:

demo.bak 和 demo.dir 的文件内容:
'name', (0, 43)
'info', (512, 45)
'func', (1024, 27)

demo.dat 的文件内容:
€]q (X   JackqX   MaxwellqX   Tomqe.   Alexqe.                                                                                                                                                                                                                                                 
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值