python常用模块之shelve模块

shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型

我们在上面讲json、pickle模块的时候,说过都不能dump都多次,那么是真的吗?当然不是的, shelve模块就可以dump多次,shelve模块其实就是封装了pickle模块,并且顺序不会乱,因为shelve模块是k,v结构,给dump的数据指定一个名字,下次用这个名字就可以load回来。

序列化:

此模块的操作在linux系统下讲解

#!/usr/bin/python

import shelve

f = shelve.open("shelve_test")  # 使用shelve模块打开一个文件

names = ["li","xiao","rain"]
info = {"name":"li","age":22} f['names'] = names # 持久化列表
f['info_dir'] = info # 持久化字典 f.close()

shelve模块的操作:

# 在linux系统下,ipython3
In [1]: import shelve In [2]: f = shelve.open("shelve_test") # 此时的f就相当于是一个文件对象,即可以像字典样操作 In [3]: f.get('names')
Out[3]: ['li', 'xiao', 'rain'] In [4]: f.get('info_dir')
Out[4]: {'name': 'li', 'age': 22} In [5]: f.keys()
Out[5]: KeysView(<shelve.DbfilenameShelf object at 0x7f6a43269198>) # 是一个列表 In [6]: list(f.keys())
Out[6]: ['names', 'info_dir'] # 列表中存了两个持久化的k In [7]: list(f.items())
Out[7]: [('names', ['li', 'xiao', 'rain']), ('info_dir', {'name': 'li', 'age': 22})] # 删除
In [8]: del f['names'] # 删除持久化的k In [9]: f.close() # 关闭文件 In [10]: f = shelve.open("shelve_test") # 重新打开文件 In [12]: f.get('names') # 无任何输出 # 增加
In [13]: f['scores'] = [1,2,3,4,"rain"] # In [14]: f.close() In [15]: f = shelve.open("shelve_test") In [16]: f.get('scores')
Out[16]: [1, 2, 3, 4, 'rain'] # 修改,相当于是重新赋值
In [17]: f['scores']
Out[17]: [1, 2, 3, 4, 'rain'] In [18]: f['scores'] = [1,2,3,4,5] In [19]: f.close() In [20]: f = shelve.open("shelve_test") In [24]: f['scores']
Out[24]: [1, 2, 3, 4, 5]

反序列化:

#!/usr/bin/python

import shelve

d = shelve.open('shelve_test')

# print(d['names'])  # 因为在之前的操作中已经删除了这个
print(d['info_dir']) d.close()

输出结果为:

root@DESKTOP-G4V06P4:~/codes# python3 反序列化.py
{'age': 22, 'name': 'li'}

python常用模块之shelve模块的更多相关文章

  1. Python常用内置模块之xml模块

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...

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

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

  3. 小白的Python之路 day5 shelve模块讲解

    shelve模块讲解 一.概述 之前我们说不管是json也好,还是pickle也好,在python3中只能dump一次和load一次,有什么方法可以向dump多少次就dump多少次,并且load不会出 ...

  4. python的pickle和shelve模块

    python中用于序列化的模块总结 目录 pickle模块 shelve模块 xml模块 pickle模块 介绍 Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python, ...

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

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

  6. python序列化_json,pickle,shelve模块

    序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes 把内存数据 转成字符,叫序列化 把字符 转成内存数据,叫反序列化 模块 ...

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

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

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

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

  9. Python常用的内建模块

    PS:Python之所以自称“batteries included”,就是因为内置了许多非常有用的模块,无需额外安装和配置,即可直接使用.下面就来看看一些常用的内建模块. 参考原文 廖雪峰常用的内建模 ...

随机推荐

  1. 【vim】几种模式的切换

    很多初学者启动vim后,不知道怎么输入字符:按了半天字母,结果屏幕还是空的. vim和记事本或WORD不一样,不是一打开后就可以输入文字,此时它处于正常模式. vim一共有4个模式: 正常模式 (No ...

  2. MR案例:倒排索引 && MultipleInputs

    本案例采用 MultipleInputs类 实现多路径输入的倒排索引.解读:MR多路径输入 package test0820; import java.io.IOException; import j ...

  3. tiny4412的烧录工具minitool安装【学习笔记】

    烧录了半天,在win10下一直就是烧录不进去,但是在Ubuntuh环境却可以,找了很久终于找到了,原来在win10安装minitool驱动的时候没有注意到报了错误,错误内容是驱动的数字签名问题,后来禁 ...

  4. iOS开发值得学习的Demo

    一.HXWeiboPhotoPicker - 仿微博照片选择器 GitHub地址:https://github.com/LoveZYForever/HXWeiboPhotoPicker 二.AFNet ...

  5. java计算两个日期之间相隔的月份(向下取整)

    最近需求里面有个需要计算两个日期之间相隔的月份,写起来还挺繁琐,需要将各种情况都要考虑到,写了一个作为以后自己的工具吧. //获取哪一天 public static int getDay(Date d ...

  6. php 模拟 asp.net webFrom 按钮提交事件

    由于公司需要php方面的项目开发,php刚刚入门,在写按钮提交过程中,asp.net里的按钮事件更好些.先看下面的代码, <? require_once '../inc/EventHelper. ...

  7. Angular如何给动态生成的元素绑定事件

    在AngularJS中,操作DOM一般在指令中完成,事件监听机制是在对于已经静态生成的dom绑定事件,而如果在指令中动态生成了DOM节点,动态生成的节点不会被JS事件监听. 举例来说: angular ...

  8. C++11 auto类型说明符的使用

    编程的时候常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型.然而做到这一点很难,有时候根本做不到.为了解决这个问题.C++11新标准引入了auto类型说明符,用它就 能让编 ...

  9. Django 2.0 的路由如何实现正则表达式

    在django2.0的路由系统中,摒弃了1.x中的url,而改用path.需要导入path. from django.urls import path,re_path 在1.x中,使用url()即可实 ...

  10. elasticsearch 集群的安装部署

    一 介绍 elasticsearch 是居于lucene的搜素引擎,可以横向集群扩展以及分片,开发者无需关注如何实现了索引的备份,集群同步,分片等,我们很容易通过简单的配置就可以启动elasticse ...