1、shelve模块是一个简单的key,value将内存数据通过文件持久化的模块
2、shelve模块可以持久化任何pickle可支持的python数据格式
3、shelve就是pickle模块的一个封装
4、shelve模块是可以多次dump和load

https://docs.python.org/3.6/library/shelve.html

1、该模块底层使用dbm模块做存储,具体使用的是dbm.gnu还是dbm.ndbm,由运行时看哪个装了就用哪个,否则用dbm.dumb

2、不支持并发读写,但是支持并发读

#!/usr/bin/env python
#coding=utf-8
import shelve
import threadingclass A(object):  """一个用于测试的类 其中只打印出hello和bye  """def __init__(self, name):self.name = nameself.__actions = ['hello', 'bye']def _hello(self):print ('hello, %s' % self.name)def _bye(self):print ('bye, %s' % self.name)def act(self):for a in self.__actions:if callable(getattr(self, '_'+a)):getattr(self, '_'+a)()FILENAME = 'shelve_test'
KEY = 'myobj'
DATA = A('qx')def test1():  """基本用法  """with shelve.open(FILENAME) as d:d[KEY] = DATAdata = d[KEY]print ('type(data)=%s' % type(data))del d[KEY]try:data = d[KEY]except KeyError:print ('key=%s not found' % KEY)d[KEY] = DATAdef test2():  """当没有使用write_back=True时 shelve无法检测到可变对象的更新  """with shelve.open(FILENAME) as d:d['xx'] = [0, 1, 2]print ("d['xx']=", d['xx'])  # [0, 1, 2]d['xx'].append(3)print ("d['xx']=", d['xx'])  # [0, 1, 2]def test3():  """继续test2 只能通过重新赋值来更新d['xx']  """with shelve.open(FILENAME) as d:d['xx'] = [0, 1, 2]print ("d['xx']=", d['xx'])  # [0, 1, 2]data = d['xx']data.append(3)d['xx'] = dataprint ("d['xx']=", d['xx'])  # [0, 1, 2, 3]def test4(flag=None):  """不支持并发读写 这是由Unix文件系统的文件锁保证的 但是支持多线程并发读  """if flag is None: flag = 'c'def _test():d = shelve.open(FILENAME, flag=flag)try:data = d[KEY]except Exception as exc:print ('exception:%s' % exc)else:data.act()print (d['xx'])finally:d.close()t1 = threading.Thread(target=_test)t2 = threading.Thread(target=_test)t1.start();t2.start()t1.join();t2.join()def split(seq):  """打印分隔线  """print ('====test %d====' % seq)if __name__ == '__main__':split(1);test1()  # key=myobj not foundsplit(2);test2()split(3);test3()split(4);test4('r')  # 如果调用test4() 会报异常 Resource temporarily unavailable

转载于:https://www.cnblogs.com/qxxnxxFight/p/11152956.html

python的shelve库相关推荐

  1. python常用标准库有哪些-Python 200个标准库汇总

    文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串 ...

  2. Python使用标准库zipfile+re提取docx文档中超链接文本和链接地址

    推荐教材: <Python程序设计实用教程>,ISBN:978-7-5635-6065-3,董付国,北京邮电大学出版社 教材封面: 全国各地新华书店有售 京东购买链接: 配套资源:教学大纲 ...

  3. python 常用标准库

    python 常用标准库 1.文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 st ...

  4. python内置库之学习ctypes库(二)

    ctypes库踩坑日记2 一.自己实现一个dll文件,再用python的ctypes库调用思路1更清晰 二.生成dll文件 三.ctypes库调用 一.自己实现一个dll文件,再用python的cty ...

  5. python内置库之学习configparser库(一)

    python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...

  6. python 脚本撞库国内“某榴”账号

    其实日常生活中我们的用户名和密码就那么几个,所以这给撞库带来了可能,本文主要给出python脚本撞库的一点粗浅代码.这里只讨论技术本生,代码中某榴的地址也已经改掉,避免被管理员误解禁言等发生,谢谢大家 ...

  7. Python中lxml库的安装(Windows平台)

    之前写过<Python中requests包的安装>,今天我需要安装lxml库,这里我尝试之前安装requests方式,但是没有成功,几经周折,终于总结出来了一个方法,这里拿出来给大家分享. ...

  8. 第四章 python的turtle库的运用

    我们可以尝试用python的自带turtle库绘制一条蟒蛇 首先我们设计一下蟒蛇的基本形状 我们先把这段蟒蛇绘制的实例代码贴出来,各位可以在自己的本地运行一下看看效果,然后我们再继续分析代码: 1 # ...

  9. python相对路径库_如何最简单、通俗地理解Python的搜索路径、相对路径、绝对路径?...

    目录: 一.笔记 二.我的自学路线 三.笔记目录 一.笔记 1) 搜索路径 ① 能导入模块的话,表示搜索路径中有这个模块文件. ② 当你导入一个模块,Python解析器对模块位置的搜索顺序是:1. 当 ...

  10. python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...

最新文章

  1. 十五天精通WCF——第八天 对“绑定”的最后一点理解
  2. 欢迎来到美多商城!-项目准备之项目介绍-项目需求分析-项目架构设计
  3. Java核心技术点之集合框架
  4. Python入门基础知识学什么?
  5. C#操作Excel的OLEDB方式与COM方式比较
  6. ladp3 获取属性_Ldap3库使用方法(四)
  7. GM也坐不住了的s9t9
  8. java按键修改_修改键位映射,打造自己的个性键盘 [转自赵翔鹏的Blog]
  9. 请还未提交实名的博客专家在8月4日前尽快提交您的实名信息
  10. Oracle中 如何用一个表的数据更新另一个表中的数据(含表备份)
  11. 黑客获取数据信息的目的和进攻手段及应对之策
  12. Cisco 静态NAT、动态NAT配置
  13. 爬虫京东Apple12部分销量数据可视化操作
  14. Python+OpenCV摄像头人脸识别
  15. 计算机在服装生产中的应用情况,【服装设计论文】服装设计中计算机信息技术的运用(共1730字)...
  16. 文件服务器不能打印,服务器不能用作打印服务器 - Windows Server | Microsoft Docs
  17. UVA 10499 正义的土地
  18. 安卓苹果下载地址合并 苹果安卓专用二维码是如何生成的
  19. 电子印章助推《上海市公共数据和一网通办管理办法》施行
  20. navicat 快捷键使用

热门文章

  1. 中介者模式(Mediator) 笔记
  2. 2012年最新75款免费的专业英文字体下载【下篇】
  3. Google将推游戏内广告技术 游戏中插入视频广告
  4. 基于.NET Compact Framework的应用程序和库汇总
  5. C#问题——interface class
  6. HTML(Hepertext Markup Language 超文本标记语言)
  7. mysql到es的交叉验证
  8. 招聘 | 浙大杨杰课题组-博士后与科研助理-医学AI/NLP
  9. 机器学习算法难学吗?一文带你掌握机器学习知识要点
  10. 赛尔原创 | ACL20 用于多领域端到端任务型对话系统的动态融合网络