shelve模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式,shelve模块是对pickle模块的补充。我们知道,如果调用pickle模块,向文件中dump()字符串的时候,读取的时候必须一次一次进行load()。

首先,我们使用pickle向文件中写入信息,来看一下情况:

import pickle

  ufo = {"alex":123,"tom":456}           
  l1 = [11,22,33,44]
  with open("file_json","wb") as f:
  pickle.dump(ufo,f)                     #把字典dump()到文件中
  pickle.dump(l1,f)                      #把列表dump()到文件中

上面程序,我们向文件"file_json"中写入了一个字典和一个列表。接下来,我们使用load()来读取文件中的信息。如下:

import pickle

  with open("file_json","rb") as f:
  a = pickle.load(f)           #使用load()反序列化,读取文件信息
  print(a)

  b = pickle.load(f)           #使用load()反序列化,读取文件信息
  print(b)

运行如下:

{'alex': 123, 'tom': 456}
  [11, 22, 33, 44]

从上面代码运行的结果可以看出,得到的是上面dump()进去的字典和列表。但是只能一次一次的读取,遵循先进先出的原则,最先dump()进去的数据也最先load()出来,但是这样也存在一定的缺陷,比如我想直接取列表的信息,但是由于列表是后面添加进去的,因为只能load()两次,如何才能直接提取列表呢?shelve模块就是解决这样的问题的。

    shelve模块存储文件信息

import shelve

class func(object):
def __init__(self,n):
self.n = n d = {"alex":"sb","tom":"is","aoi":""}
l = ["alex","pipei","erbi"] fun = func() #生成一个类个体 with shelve.open("shelve_test") as f: #使用shelve模块打开文件
f["fun"] = fun #往shelve模块中添加变量,以k,v形式进行添加文件信息,首先添加一个类变量
f["d"] = d #添加一个字典
f["l"] = l #添加一个列表

shelve模块读取文件信息

import shelve

#读取
with shelve.open("shelve_test","r") as f: #使用shelve打开模块
a = f.get("d")
print(a) b = f.get("fun") #指定键值对形式获取存储信息
print(b.n)

运行结果如下:

{'alex': 'sb', 'tom': 'is', 'aoi': '456'}
  1568

可以看出,使用shelve模块,能够指定命的形式来获取存储的信息,不需要按照顺序,让我们使用比较方便,克服了pickle的缺陷,因此,要经常使用shelve模块进行文件的存储与读取。

注意:使用shelve模块打开文件的方法是open(),shelve.open("file_name"),不需要指定以什么形式打开,并且读取文件的时候也是,使用shelve.open()打开文件。要想获得shelve模块中的文件信息,要使用get()方法,f.get()来获取文件中的信息。

day6 shelve模块的更多相关文章

  1. python序列化: json & pickle & shelve 模块

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

  2. python pickle 和 shelve模块

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

  3. shelve模块

    #coding:utf-8 __author__ = 'similarface' #email:similarface@outlook.com ''' shelve模块: 映射容器 存储对象,被存储的 ...

  4. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

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

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

  6. python之shelve模块详解

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

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

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

  8. os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法

    一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...

  9. json,pickle,shelve模块,xml处理模块

    常用模块学习—序列化模块详解 什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 为什么要序列化? 你打游戏过程 ...

随机推荐

  1. Hadoop生态圈-hbase介绍-伪分布式安装

    Hadoop生态圈-hbase介绍-伪分布式安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HBase简介 HBase是一个分布式的,持久的,强一致性的存储系统,具有近似最 ...

  2. Shell记录-Shell脚本基础(六)

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行. 1.命令格式 watch[参数][命令] ...

  3. 最小割 D. Behind the Wall Samara University ACM ICPC 2016-2017 Quarterfinal Qualification Contest

    题目链接:http://codeforces.com/gym/101149/problem/D 题目大意: 堡垒受到攻击.堡垒是n*m的矩阵,矩阵里刚开始都是平地,然后那个数值表示在当前平地上建一面墙 ...

  4. 【官方文档】Nginx负载均衡学习笔记(二)负载均衡基本概念介绍

    简介 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务.负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应 ...

  5. 【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)

    说明:很简单一个在HTTP模块中,而另外一个和HTTP 是并列的Stream模块(Nginx 1.9.0 支持) 一.两个模块的最简单配置如下 1.HTTP负载均衡: http { include m ...

  6. Java8 新特性 Streams map() 示例

    在Java 8中stream().map(),您可以将对象转换为其他对象.查看以下示例: 1.大写字符串列表 1.1简单的Java示例将Strings列表转换为大写. TestJava8.java p ...

  7. 20155227 2016-2017-2 《Java程序设计》第七周学习总结

    20155227 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 认识时间与日期 时间的度量 世界时:在1972年引入UTC之前,GMT与UT是相同的. 国际 ...

  8. Spark MLlib使用有感

    这些天在公司里面做文本分析的任务,我跟着玻哥一起做,先研究了算法的可行度,最后决定使用Google的Word2Vector和LDA算法来对文本进行分析.之前因为看过一些Spark的东西,所以准备瞄准M ...

  9. 【leetcode 简单】 第一百一十二题 重复的子字符串

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: True 解释 ...

  10. [转]softmax函数详解

    答案来自专栏:机器学习算法与自然语言处理 详解softmax函数以及相关求导过程 这几天学习了一下softmax激活函数,以及它的梯度求导过程,整理一下便于分享和交流. softmax函数 softm ...