前面学习了pickle,这两个可以将数据持久化存储到硬盘上,在实际应用中,我们可能会多次将数据dump到同一文件里,试一下:

import pickle
data = {'k1':123, 'k2':123}
data1 = {'d1':111, 'd2':222} #先dump一次
with open('data.pkl', 'wb') as f:
pickle.dump(data, f)
#使用追加模式再dump一次
with open('data.pkl', 'ab') as f:
pickle.dump(data1, f) #先读取一次
with open('data.pkl', 'rb') as f:
data_first = pickle.load(f)
print(data_first)

先执行一下,看看结果:

{'k1': 123, 'k2': 123}

将第一次dump的结果读取出来了。

那我们再读取一次

#先读取一次
with open('data.pkl', 'rb') as f:
data_first = pickle.load(f)
data_second = pickle.load(f)
print(data_first)
print(data_second)

执行结果

{'k1': 123, 'k2': 123}
{'d1': 111, 'd2': 222}

由此可以得知,第一次读取的是第一次dump的数据,第二次读取的是第二次dump的数据,那第n次读取的就是第n次dump的数据. 那如果dump次数多了之后,根本就不可能知道,每次dump的内容是什么。而shelve 的作用就是让你知道你每次dump的是什么!

import shelve

f = shelve.open("shelve_test")

class Test(object):
def __init__(self, n):
self.n = n #两个类的实例
t = Test(123)
t2 = Test(112233)
#再定义一个列表
name = ["alex", 'rain', 'jack'] f["test"] = name #持久化列表,'test'是我们给这次序列化取的名字,shelve内部实际上是key,vaule结构,test就是key
f["t1"] = t #持久化类
f["t2"] = t2 f.close() #关闭 #反序列化 也可以用with shelve.open 方式 with shelve.open("shelve_test") as f:
a = f['test']
b = f['t1']
c = f['t2']
print(a)
print(b.n)
print(c.n)

shelve内部是key, value结构,在每次序列化时定义一个名字(即key),这样我们就能方便的根据key来获取数据。

python(6)- shelve模块的更多相关文章

  1. python之shelve模块详解

    一.定义 Shelve是对象持久化保存方法,将对象保存到文件里面,缺省(即默认)的数据存储文件是二进制的. 二.用途 可以作为一个简单的数据存储方案. 三.用法 使用时,只需要使用open函数获取一个 ...

  2. python的shelve模块

    shelve shelve是一额简单的数据存储方案,他只有一个函数就是open(),这个函数接收一个参数就是文件名,并且文件名必须是.bat类型的.然后返回一个shelf对象,你可以用他来存储东西,就 ...

  3. Python基础-shelve模块

    shelve模块会生成test.txt.bak.test.txtdat.test.txt.dir三个文件 import shelve f = shelve.open(r'text.txt') f['} ...

  4. python中shelve模块的使用

    import shelve # 将序列化文件操作dump与load进行封装,写入文件的内容就是个大的字符串字典 s_dic = shelve.open("text/b.txt",w ...

  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 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  7. python pickle 和 shelve模块

    pickle和shelve模块都可以把python对象存储到文件中,下面来看看它们的用法吧 1.pickle 写: 以写方式打开一个文件描述符,调用pickle.dump把对象写进去 dn = {'b ...

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

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

  9. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

随机推荐

  1. 开源软交换系统 FreeSwitch 与 Asterisk 比较

    Asterisk 与freeswitch都是流行的开源软交换服务器,Asterisk出现的比较早,大概在1999年开始此项目,应该是最流行的开源软交换服务器,整个社区上下游都已经很成熟. freesw ...

  2. linux内核书籍

    1, 关于操作系统理论的最初级的知识.不需要通读并理解<操作系统概念><现代操作系统>等巨著,但总要知道分时(time-shared)和实时(real-time)的区别是什么, ...

  3. work_5

    第五次作业对我个人来说是很难的,因为之前没怎么接触过这方面的内容,有幸能跟宗毅组成一队,我也仔细看了他的Python代码,因为对于Python也是第一次接触,所以我感觉在有限的时间里学会并且灵活运用还 ...

  4. 学习使用Markdown标记语言

    学习如何使用Markdown进行文本编辑 使用教程   大家若是经常逛Github,就知道其中有一个文件叫做README.MD.我一开始也不知道这个.MD是什么意思,后来我自己写了一次,就知道了这一种 ...

  5. shell下解码url

    http://aaronw.me/static/779.html 封装了一下,有需要的拿走 function url_decode() { local url=$ echo $url | awk 'B ...

  6. PID入门的十五个基本概念

    PID调节系统PID功能由PID调节器或DCS系统内部功能程序模块实现,了解与PID调节相关的一些基本概念,有助于PID入门新手快速熟悉调节器应用,在自动调节系统中成功整定PID参数.1.被调量被调量 ...

  7. codeforces 622A Infinite Sequence

    A. Infinite Sequence time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. C#中ArrayList和string,string[]数组的转换

    转载原地址: http://www.cnblogs.com/nextsoft/articles/2218689.html 1.ArrarList 转换为 string[] : ArrayList li ...

  9. Java日期处理类

    1.Date java.util.Date 2.Calendar 日历类,通过getInstance()获取实例对象,可以获取年月日时分秒 3.SimpleDateFormat 日期格式化,forma ...

  10. mybatis generator配置文件

    <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration ...