day5模块学习--shelve模块
shelve模块
shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据,简单来说,使用者可以将一个列表、字典、或者用户自定义的类实例保存到shelve中,下次需要用的时候直接取出来,就是一个Python内存对象,不需要像传统数据库一样,先取出数据,然后用这些数据重新构造一遍所需要的对象。下面是简单示例:
shelve存储数据:
import shelve,datetime
names = ["alex","tom","tenglan"]
ages = [18,16,15]
f = shelve.open("database")
f["age"] = ages
f["name"] = names
f['date'] = datetime.date.today()
f.close()
上面代码中,我们使用shelve打开文件并往里面写入数据,是以字典形式写入数据,句柄f相当于字典一样,往文件添加数据,就跟我们往字典中添加数据的原理是一样的,如f["age"]=ages,键值对。
shelve读取数据:
import shelve,datetime
f = shelve.open("database")
print(f.keys())
print(f.values())
print(type(f.get("name")))
print(f.get("age"))
print(f.get("date"))
f.close()
运行如下:
KeysView(<shelve.DbfilenameShelf object at 0x7f0e89a97898>)
ValuesView(<shelve.DbfilenameShelf object at 0x7f0e89a97898>)
<class 'list'>
[, , ]
--
上面代码,我们把存储的数据对去出来了,可以看出,读取出来的数据类型没有改变,不是字符串,并且文件句柄就是一个字典,存储在文件句柄中一样。
shelve模块打开文件还有一个神奇的地方,就是如果这个文件不存在则创建,如果这个文件存在则读取。
这个有一个潜在的小问题,如下:
>>> import shelve
>>> s = shelve.open("test.dat")
>>> s["x"] = ["a","b","c"]
>>> s["x"].append("d")
>>> s["x"]
['a', 'b', 'c']
存储的d到哪里去了呢?其实很简单,d没有写入,我们把["a","b","c"]存储到了x,当我们再次读取s["x"]的时候,s["x"]只是一个拷贝,而我们没有将拷贝写回,所以当我们再次读取s["x"]的时候,它又从源中读取了一个拷贝,所以,我们新修改的内容并不会出现在拷贝中,解决的办法就是,第一个是利用一个缓存的变量,如下所示: >>> import shelve
>>> s = shelve.open("test.dat")
>>> tmp = ["a","b","c"]
>>> s["x"] = tmp
>>> tmp.append("d")
>>> s["x"] = tmp
>>> s['x']
['a', 'b', 'c', 'd']
s.close()
文件写进去时候是不能直接修改的,就算修改了,也要重新写进去,这就是文件的要求,不可能修改之后,文件里面直接改变。
import shelve,datetime
f = shelve.open("database")
print(f.keys())
print(f.values())
print(type(f.get("name")))
print(f.get("age"))
print(f.get("date"))
f.close()
day5模块学习--shelve模块的更多相关文章
- logging模块、sys模块、shelve模块
一.logging模块 1.logging模块就是用于记录日志的,日志就是记录某个时间点,发生的事情. 2.记录日志是为了日后来复查,提取有用的信息. 3.如何去记录日志:可以直接打开文件,记录信息, ...
- python常用模块之shelve模块
python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...
- day5模块学习 -- os模块学习
python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...
- python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time & datetime模块
正则表达式 语法: mport re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0 ...
- 序列化模块— json模块,pickle模块,shelve模块
json模块 pickle模块 shelve模块 序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. # 序列化模块 # 数据类型转化成字符串的过程就是序列化 # 为了方便存储和网 ...
- Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块
一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...
- python16_day06【类、RE模块、subprocess模块、xml模块、shelve模块】
一.shelve模块 import shelve # 基于pickle模块, d = shelve.open('shelve_test') class Test(object): def __init ...
- Python基础(12)_python模块之sys模块、logging模块、序列化json模块、pickle模块、shelve模块
5.sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 ...
- python 之 random 模块、 shutil 模块、shelve模块、 xml模块
6.12 random 模块 print(random.random()) (0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3)) [1,3] 大 ...
随机推荐
- POJ - 2976 Dropping tests && 0/1 分数规划
POJ - 2976 Dropping tests 你有 \(n\) 次考试成绩, 定义考试平均成绩为 \[\frac{\sum_{i = 1}^{n} a_{i}}{\sum_{i = 1}^{n} ...
- 面试心得与总结---BAT、网易、蘑菇街
作者:Xoper.ducky链接:https://www.nowcoder.com/discuss/3043来源:牛客网 之前实习的时候就想着写一篇面经,后来忙就给忘了,现在找完工作了,也是该静下心总 ...
- 转:实现OC与JS的简易交互
oc-->js stringByEvaluatingJavaScriptFromString,其参数是一NSString 字符串内容是js代码(这又可以是一个js函数.一句js代码或他们的组合) ...
- linux下项目上线配置nginx+tomcat
nginx.conf server { listen 80; server_name www.examples.com; client_max_body_size 300m; #charset koi ...
- zookeeper系列之:独立模式部署zookeeper服务
一.简述 独立模式是部署zookeeper服务的三种模式中最简单和最基础的模式,只需一台机器即可,独立模式仅适用于学习,开发和生产都不建议使用独立模式.本文介绍以独立模式部署zookeeper服务器的 ...
- Redis学习十:Redis的复制(Master/Slave)【重要】
一.是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 二.能干嘛 读写分离 容灾恢 ...
- 20155315 2016-2017-2 《Java程序设计》第五周学习总结
教材学习内容总结 第8章 异常处理 1.使用try...catch 与C语言中程序流程和错误处理混在一起不同,Java中把正常流程放try块中,错误(异常)处理放catch块中. 如果父类异常对象在子 ...
- 通过BurpSuite和sqlmap配合对dvwa进行sql注入测试和用户名密码暴力破解
0x1 工具和环境介绍 dvwa:渗透测试环境 BurpSuite:强大的WEB安全测试工具 sqlmap:强大的sql注入工具 以上工具和环境都在kali linux上安装和配置. 0x2 步骤说明 ...
- beego项目运行过程
一:首先man.go,整个程序的入口 func main() { beego.Run() } 然后beego.run()代码 // Run beego application. // beego.Ru ...
- Dream------scala--函数定义、流程控制、异常处理
Dream------scala--函数定义.流程控制.异常处理 一.函数的定义 1.新建工程