本节内容

1、简述

2、shelve概念

3、shelve模块使用

4、总结

一、简述

  之前我们说不管是json也好,还是pickle也好,在python3中只能dump一次和load一次,不能dump多次,和load多次,但是我们真想要dump多次和load多次怎么办呢,并且能事项数据的持久化呐?好吧,今天我们就来说说这个shelve模块。

二、shelve概念

1、持久化

1
2
3
4
5
6
7
8
9
10
11
12
13
import shelve   #导入shelve模块
 
def stu_data(name,age):   #定义一个函数
    print("register stu:",name,age)
 
name = ["test","zhang","qi","gao"]   #定义一个列表
 
info = "name":"zhangqigao","age":18#定义一个字典
 
with shelve.open("shelve_test") as d:
    d["test"= name    #持久化列表
    d["info"= info       #持久化字典
    d["func"= stu_data   #持久化函数

代码执行结果:

生成三个文件夹,分别是:shelve_test.dir、shelve_test.dat、shelve_test.bak

①shelve_test.dir内容

1
2
3
'test', (050)
'func', (102424)
'info', (51248)

②shelve_test.dat内容

1
2
3
4
5
6
�]q (X   testqX   zhangqX   qiqX   gaoqe.
�}q (X   nameqX
   zhangqigaoqX   ageqKu.
�c__main__
stu_data
q .

③shelve_test.bak内容

1
2
3
'test', (050)
'func', (102424)
'info', (51248)

2、解析文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import shelve
 
def stu_data(name,age):   #这边一定要定义相同名字的函数,不然执行报错
    print("stu:",name,age)
 
with shelve.open("shelve_test") as f:
    print(f['test'])      #解析列表
    print(f['info'])       #解析字典
    print(f["func"]("zhangqsan",22))   #解析函数
 
#输出
['test''zhang''qi''gao']
{'age'18'name''zhangqigao'}
stu: zhangqsan 22
None

三、shelve模块使用

3.1、常用方法

1
2
3
4
5
6
7
8
9
10
11
12
>>> import shelve
>>> d = shelve.open("shelve_test")
>>> dir(d)
['_MutableMapping__marker''__abstractmethods__''__class__''__contains__''__del__',
 '__delattr__''__delitem__''__dict__''__dir__''__doc__''__enter__''__eq__''__exit__',
 '__format__''__ge__''__getattribute__''__getitem__''__gt__''__hash__''__init__',
'__iter__''__le__''__len__''__lt__''__module__''__ne__''__new__''__reduce__',
 '__reduce_ex__''__repr__''__setattr__''__setitem__''__sizeof__''__slots__''__str__',
 '__subclasshook__''__weakref__''_abc_cache''_abc_negative_cache',
'_abc_negative_cache_version''_abc_registry''_protocol''cache''clear''close''dict',
 'get''items''keyencoding''keys''pop''popitem''setdefault''sync''update',
'values''writeback']

 3.2、update

说明:update方法是如果序列化的值存在,则更新,如果不存在,则新增,用法:update({key:序列化对象})

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#dumps到文件中
import shelve
 
info = {
    "name":"zhangqigao",
    "age":18
}
 
with shelve.open("shelve_test") as d:
    d['qigaotest'= info   #变量存在
    d.update({'qigaotest':"shuaigaogao"})   #更新已经key为"qigaotest"的值
 
 
#loads到内存中
import shelve
 
with shelve.open("shelve_test") as f:
    print(f.get("qigaotest"))
 
#输出
shuaigaogao

3.3、get

说明:把文件中的值load到内存中时,通过get它的key值获取

1
2
3
4
5
6
7
import shelve
 
with shelve.open("shelve_test") as f:
    print(f.get("qigaotest")) #或者是f["qigaotest"]
 
#输出
shuaigaogao

注意:如果是通过f["qigaotest"]这种方法取,如果值不存在则会报错,通过get去取,不存在,则会返回none

四、总结

  1. shelve模块是一个简单的key,value将内存数据通过文件持久化的模块。
  2. shelve模块可以持久化任何pickle可支持的python数据格式。
  3. shelve就是pickle模块的一个封装。
  4. shelve模块是可以多次dump和load。

函数和常用模块【day06】:shelve模块(五)的更多相关文章

  1. python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  2. logging模块、sys模块、shelve模块

    一.logging模块 1.logging模块就是用于记录日志的,日志就是记录某个时间点,发生的事情. 2.记录日志是为了日后来复查,提取有用的信息. 3.如何去记录日志:可以直接打开文件,记录信息, ...

  3. Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块

    一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...

  4. python16_day06【类、RE模块、subprocess模块、xml模块、shelve模块】

    一.shelve模块 import shelve # 基于pickle模块, d = shelve.open('shelve_test') class Test(object): def __init ...

  5. Python基础(12)_python模块之sys模块、logging模块、序列化json模块、pickle模块、shelve模块

    5.sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 ...

  6. python 之 random 模块、 shutil 模块、shelve模块、 xml模块

    6.12 random 模块 print(random.random()) (0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3)) [1,3] 大 ...

  7. 序列化模块— json模块,pickle模块,shelve模块

    json模块 pickle模块 shelve模块 序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. # 序列化模块 # 数据类型转化成字符串的过程就是序列化 # 为了方便存储和网 ...

  8. day5模块学习--shelve模块

    shelve模块 shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据,简单来说,使用者可以将一个列表.字典.或者用户自定义的 ...

  9. shelve模块,sys模块,logging模块

    1.shelve模块 用于序列化的模块,shelve模块比pickle模块简单,只有open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型. impor ...

随机推荐

  1. SE Springer小组之《Spring音乐播放器》需求分析说明书一

    软件需求说明书 软件需求说明书的编制是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解, 使之成为整个开发工作的基础. 1 引言 1.1编写目的 使用户对该软件的初始规定有一个理解,也使软 ...

  2. 开发中CollectionUtils处理集合

    1.org.apache.commons.collections.CollectionUtils; 使用这个工具类,帮我们处理一些集合的操作,非常方便 //取并集public void testUni ...

  3. SQLSERVER 创建对Oracle数据库的DBlink以及查询使用

    1. 与针对oracle数据库一样, 在sqlserver中创建对oracle数据库的dblink 安全性上面也进行定义(貌似不需要跟访问字符串只需要填一个即可) 发现有的版本改注册表不管用 还得修改 ...

  4. ElasticSearch 6.x head插件安装

    一.下载node.js yum install -y nodejs 二.安装npm npm install -g cnpm --registry=https://registry.npm.taobao ...

  5. php常用扩展安装

    ####memcache wget http://pecl.php.net/get/memcache-2.2.7.tgztar xf memcache-2.2.7.tgz cd memcache-2. ...

  6. delphi ADOQuery 开启本地缓存

    在开发 C/S 应该程序的时候,有时为了程序的运行提高效率. 需要使用 缓存功能: //ADO组件需要把 ADOQuery1.LockType:=ltBatchOptimistic; ADOQuery ...

  7. 关于Spring MVC跨域

    1.Sping MVC 3.X跨域 关于跨域问题,主要用的比较多的是cros跨域. 详细介绍请看https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Ac ...

  8. 微信小程序入門學習資料鏈接

    https://blog.csdn.net/github_38847071/article/details/73250258 https://blog.csdn.net/lily2016n/artic ...

  9. Lodop窗口的按钮、权限,隐藏或设置功能不可用

    Lodop隐藏某个按钮或部分,具体参考Lodop技术手册 SET_SHOW_MODE篇.以下是几个例子,(对应下图图片): 第一种:LODOP.SET_SHOW_MODE ("HIDE_PB ...

  10. BZOJ2157旅游——树链剖分+线段树

    题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路 ...