1. shelve模块的介绍

(1)shelve模块:

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

(2)shelve模块的特点:

      1、shelve模块只有一个open()函数;

2、shelve模块是一个简单的将内存数据通过文件持久化保存的模块;

3、shelve模块可以持久化任何pickle可支持的python数据格式。

(3)shelve模块中的open()函数:

格式为:shelve.open(filename,flag)

filename:文件名;

flag:打开数据存储文件的格式;

'r' 以只读模式打开一个已经存在的数据存储文件
'w' 以读写模式打开一个已经存在的数据存储文件
'c' 以读写模式打开一个数据存储文件,如果不存在则创建
'n' 总是创建一个新的、空数据存储文件,并以读写模式打开

2. shelve模块的使用

(1)保存数据(数据持久化):

import shelvename = ['Alce', 'Bob', 'Janice']
infos = {'name': 'Alice', 'age': 22,'hobby':'music'}
days=(31,28,31,30,31)# 保存数据(数据持久化)
with shelve.open('shelve.txt') as f:f['name'] = name   # 持久化列表f['infos'] = infos  # 持久化字典f['days']=days      #持久化元组

执行代码之后会生成三个文件,分别是:shelve.txt.bak     shelve.txt.dat     shelve.txt.dir。

shelve.txt.bak的内容为:

'name', (0, 42)
'infos', (512, 67)
'days', (1024, 17)

shelve.txt.dat的内容为:

�]q (X   AlceqX   BobqX   Janiceqe.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    �}q (X   nameqX   AliceqX   ageqKX   hobbyqX   musicqu.                                                                                                                                                                                                                                                                                                                                                                                                                                                           �(KKKKKtq .

shelve.txt.dir的内容为:

'name', (0, 42)
'infos', (512, 67)
'days', (1024, 17)

(2)读取数据:

可以通过字典的形式获取数据

import shelvewith shelve.open('shelve.txt')as f:for k,v in f.items():print(k,':',v)结果如下:
name : ['Alce', 'Bob', 'Janice']
infos : {'name': 'Alice', 'age': 22, 'hobby': 'music'}
days : (31, 28, 31, 30, 31)

我们也可以使用get的方式来获取数据

import shelvewith shelve.open('shelve.txt')as f:name=f.get('name')infos=f.get('infos')days=f.get('days')print(name)
print(infos)
print(days)结果如下:
['Alce', 'Bob', 'Janice']
{'name': 'Alice', 'age': 22, 'hobby': 'music'}
(31, 28, 31, 30, 31)

3. shelve模块的应用实例

如下例题是一个简单的登录系统,可以登录三次,登录成功后,可以添加一个学生的信息和修改密码,更新db文件的信息,然后保存到db文件中,下次读取是就是更新后的内容;

然后通过读取文件的内容,查看db文件中的信息,score和account;

import shelve
import random#存入数据
with shelve.open('db')as db:#scores为一个列表,如果score中有值,则scores=score,如果没有则scores=[]scores= db.get("score",[])#accounts为一个字典,如果account中有值,则accounts=account,如果没有则accounts={"admin":"12345"}accounts=db.get('account',{"admin":"12345"})for i in range(3):id = input("用户名:")password = input("密码:")if id in accounts and accounts[id]==password:print('成绩表为:',scores)name = input("name:")         #向列表中添加学生姓名cj = random.randint(50, 100)  #向列表中添加学生成绩scores.append([name,cj])print('成绩表为:',scores)npass=input("新密码:")db['score']=scoresdb['account']={"admin":npass}breakelse:print("用户名或密码错误")else:print("三次机会已用完,再见!")#读取保存的数据信息
print('-'*20)
with shelve.open('db')as db:for k,v in db.items():print(k,':',v)

结果如下:

用户名:admin
密码:123
用户名或密码错误
用户名:admin
密码:12345
成绩表为: []
name:1
成绩表为: [['1', 83]]
新密码:11111
--------------------
score : [['1', 83]]
account : {'admin': '11111'}

Python编程——shelve模块的使用详解(附实例)相关推荐

  1. Python编程——pickle模块的使用详解(附实例)

    1.  模块的介绍 在介绍pickle模块之前,我们先了解一下python中的模块以及模块的分类,可以让我们对模块有更深入的了解. (1) 模块是什么: Python 模块(Module),是一个 P ...

  2. Python编程——psutil模块的使用详解

    1. psutil模块的介绍 在Python中,我们可以使用psutil这个第三方模块去获取信息的信息. psutil模块可以跨平台使用,支持Linux/UNIX/OSX/Windows等,它主要用来 ...

  3. Python中random模块生成随机数详解

    Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...

  4. python中selenium模块驱动谷歌详解

    python中selenium模块驱动谷歌详解 Selenium的介绍.配置和调用 Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中 ...

  5. python中xlrd模块的使用详解

    python中xlrd模块的使用详解 两个问题: 什么是xlrd模块? 为什么使用xlrd模块? 1.什么是xlrd模块? python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读 ...

  6. 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成

    详解Python基础random模块随机数的生成 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python基础random模块随机数的生成.txt ] ( ...

  7. python中re模块的span,详解Python正则表达式re模块

    正则是处理字符串最常用的方法,我们编码中到处可见正则的身影. 正则大同小异,python 中的正则跟其他语言相比略有差异: 1.替换字符串时,替换的字符串可以是一个函数 2.split 函数可以指定分 ...

  8. Python之Re模块匹配正则表达式详解

    目录 前言 1. re.match方法 2. re.search方法 3. 检索和替换方法re.sub 4. re.compile方法 5. re.findall方法 6. re.finditer方法 ...

  9. Python 正则re模块之findall()详解

    1. 先说一下findall()函数的两种表示形式 import re kk = re.compile(r'\d+') kk.findall('one1two2three3four4') #[1,2, ...

最新文章

  1. 漫画 | 一个NB互联网项目的上线过程…
  2. php的辅助工具下载,PHPTools 工具包(让你的EditPlus可以调试PHP)
  3. 如何理解Generator
  4. 操作系统老师上课讲的那个根据I/O时间和CPU时间比例来为进程分配优先级的题目,I/O时间比例越大,则这个进程的优先级越高
  5. mysql列别_MySQL基础及CRUD
  6. 24-移动端app数据爬取
  7. Java黑皮书课后题第5章:*5.14(计算最大公约数)下面是求两个整数n1和n2的最大公约数的程序清单5-9的另一种解法:...提示用户输入两个正整数,然后显示最大公约数
  8. 数据结构与算法 | 二叉树四种的遍历方法(递归与非递归)
  9. php自动生成mysql的触发代码。
  10. 初一模拟赛总结(3.30)
  11. 终于有人把平均数、中位数和众数讲明白了
  12. 前端ajax与后端php数据传输总结
  13. 打印输出Arraylist对整型字符增删改查方法开始结束的用时
  14. 京东单号中转延误如何查询出的方法
  15. 2020.10.08丨全长转录组之参考基因组比对
  16. html表格背景图片格式,css背景颜色、背景图片,以及列表的多种样式
  17. JavaScript 时间操作
  18. 姚振华,一个想要胜天半子的男人
  19. Linux中buff和cache的解释与区别
  20. SpringBoot开发网页即时聊天室/IM通信/WebSocket/即时通讯

热门文章

  1. CakePHP 2.x CookBook 中文版 第七章 模型 之 关联:将模型连接在一起
  2. 给我一个纸基微流体燃料电池的具体研究思路
  3. matlab的nlinfit函数,[MATLAB混合编程] nlinfit函数运行过程中问题
  4. Window10专业版 激活
  5. 【SCOI2010】序列操作(求和+连续最长线段树)
  6. 二、yolov5原理与源码学习
  7. bool Frame::PosInGrid(const cv::KeyPoint kp, int posX, int posY)
  8. vue-element页面说明文档
  9. Java8中Collectors的使用
  10. 高端Uart TFT 串口屏控制芯片