Python编程——shelve模块的使用详解(附实例)
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模块的使用详解(附实例)相关推荐
- Python编程——pickle模块的使用详解(附实例)
1. 模块的介绍 在介绍pickle模块之前,我们先了解一下python中的模块以及模块的分类,可以让我们对模块有更深入的了解. (1) 模块是什么: Python 模块(Module),是一个 P ...
- Python编程——psutil模块的使用详解
1. psutil模块的介绍 在Python中,我们可以使用psutil这个第三方模块去获取信息的信息. psutil模块可以跨平台使用,支持Linux/UNIX/OSX/Windows等,它主要用来 ...
- Python中random模块生成随机数详解
Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...
- python中selenium模块驱动谷歌详解
python中selenium模块驱动谷歌详解 Selenium的介绍.配置和调用 Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中 ...
- python中xlrd模块的使用详解
python中xlrd模块的使用详解 两个问题: 什么是xlrd模块? 为什么使用xlrd模块? 1.什么是xlrd模块? python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读 ...
- 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成
详解Python基础random模块随机数的生成 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 详解Python基础random模块随机数的生成.txt ] ( ...
- python中re模块的span,详解Python正则表达式re模块
正则是处理字符串最常用的方法,我们编码中到处可见正则的身影. 正则大同小异,python 中的正则跟其他语言相比略有差异: 1.替换字符串时,替换的字符串可以是一个函数 2.split 函数可以指定分 ...
- Python之Re模块匹配正则表达式详解
目录 前言 1. re.match方法 2. re.search方法 3. 检索和替换方法re.sub 4. re.compile方法 5. re.findall方法 6. re.finditer方法 ...
- Python 正则re模块之findall()详解
1. 先说一下findall()函数的两种表示形式 import re kk = re.compile(r'\d+') kk.findall('one1two2three3four4') #[1,2, ...
最新文章
- 漫画 | 一个NB互联网项目的上线过程…
- php的辅助工具下载,PHPTools 工具包(让你的EditPlus可以调试PHP)
- 如何理解Generator
- 操作系统老师上课讲的那个根据I/O时间和CPU时间比例来为进程分配优先级的题目,I/O时间比例越大,则这个进程的优先级越高
- mysql列别_MySQL基础及CRUD
- 24-移动端app数据爬取
- Java黑皮书课后题第5章:*5.14(计算最大公约数)下面是求两个整数n1和n2的最大公约数的程序清单5-9的另一种解法:...提示用户输入两个正整数,然后显示最大公约数
- 数据结构与算法 | 二叉树四种的遍历方法(递归与非递归)
- php自动生成mysql的触发代码。
- 初一模拟赛总结(3.30)
- 终于有人把平均数、中位数和众数讲明白了
- 前端ajax与后端php数据传输总结
- 打印输出Arraylist对整型字符增删改查方法开始结束的用时
- 京东单号中转延误如何查询出的方法
- 2020.10.08丨全长转录组之参考基因组比对
- html表格背景图片格式,css背景颜色、背景图片,以及列表的多种样式
- JavaScript 时间操作
- 姚振华,一个想要胜天半子的男人
- Linux中buff和cache的解释与区别
- SpringBoot开发网页即时聊天室/IM通信/WebSocket/即时通讯
热门文章
- CakePHP 2.x CookBook 中文版 第七章 模型 之 关联:将模型连接在一起
- 给我一个纸基微流体燃料电池的具体研究思路
- matlab的nlinfit函数,[MATLAB混合编程] nlinfit函数运行过程中问题
- Window10专业版 激活
- 【SCOI2010】序列操作(求和+连续最长线段树)
- 二、yolov5原理与源码学习
- bool Frame::PosInGrid(const cv::KeyPoint kp, int posX, int posY)
- vue-element页面说明文档
- Java8中Collectors的使用
- 高端Uart TFT 串口屏控制芯片