python常用模块之shelve模块

shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型

我们在上面讲json、pickle模块的时候,说过都不能dump都多次,那么是真的吗?当然不是的, shelve模块就可以dump多次,shelve模块其实就是封装了pickle模块,并且顺序不会乱,因为shelve模块是k,v结构,给dump的数据指定一个名字,下次用这个名字就可以load回来。

序列化:

此模块的操作在linux系统下讲解

#!/usr/bin/python

import shelve

f = shelve.open("shelve_test")  # 使用shelve模块打开一个文件

names = ["li","xiao","rain"]
info = {"name":"li","age":22} f['names'] = names # 持久化列表
f['info_dir'] = info # 持久化字典 f.close()

shelve模块的操作:

# 在linux系统下,ipython3
In [1]: import shelve In [2]: f = shelve.open("shelve_test") # 此时的f就相当于是一个文件对象,即可以像字典样操作 In [3]: f.get('names')
Out[3]: ['li', 'xiao', 'rain'] In [4]: f.get('info_dir')
Out[4]: {'name': 'li', 'age': 22} In [5]: f.keys()
Out[5]: KeysView(<shelve.DbfilenameShelf object at 0x7f6a43269198>) # 是一个列表 In [6]: list(f.keys())
Out[6]: ['names', 'info_dir'] # 列表中存了两个持久化的k In [7]: list(f.items())
Out[7]: [('names', ['li', 'xiao', 'rain']), ('info_dir', {'name': 'li', 'age': 22})] # 删除
In [8]: del f['names'] # 删除持久化的k In [9]: f.close() # 关闭文件 In [10]: f = shelve.open("shelve_test") # 重新打开文件 In [12]: f.get('names') # 无任何输出 # 增加
In [13]: f['scores'] = [1,2,3,4,"rain"] # In [14]: f.close() In [15]: f = shelve.open("shelve_test") In [16]: f.get('scores')
Out[16]: [1, 2, 3, 4, 'rain'] # 修改,相当于是重新赋值
In [17]: f['scores']
Out[17]: [1, 2, 3, 4, 'rain'] In [18]: f['scores'] = [1,2,3,4,5] In [19]: f.close() In [20]: f = shelve.open("shelve_test") In [24]: f['scores']
Out[24]: [1, 2, 3, 4, 5]

反序列化:

#!/usr/bin/python

import shelve

d = shelve.open('shelve_test')

# print(d['names'])  # 因为在之前的操作中已经删除了这个
print(d['info_dir']) d.close()

输出结果为:

root@DESKTOP-G4V06P4:~/codes# python3 反序列化.py
{'age': 22, 'name': 'li'}

最新文章

  1. monkey工具使用中遇到的问题之二:尝试了各种方法通过adb都无法找到设备
  2. Android_helloworld
  3. 关于年终奖励的扣税算法BUG
  4. Linux系统安装MySQL步骤及支持远程操作配置方法
  5. ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。
  6. android N刷机
  7. MCS-51单片机内部结构
  8. 2017-3-20 HTML 基础知识
  9. office web apps 整合Java web项目
  10. 你应该知道的jQuery技巧【收藏】
  11. 15.linux基础
  12. Html - 后台模板
  13. 【转】SpringBoot系列之—瘦身部署
  14. (转载)Android xml资源文件中@、@android:type、@*、?、@+引用写法含义以及区别
  15. UIResponder笔记
  16. 解决protobuf import路径的问题
  17. Codeforces Round #394 (Div. 2) B. Dasha and friends
  18. CCNA 课程 四
  19. 2018多校第九场1010 (HDU6424) 数学
  20. 特征降维之SVD分解

热门文章

  1. RabbitMQ Network Partitions
  2. 配置Gitlab Push自动触发jenkins构建
  3. 转:MySQL 的show processlist
  4. IPFS星际节点网站 IPNS域名解析教程
  5. Gym - 100712G Heavy Coins(二进制枚举)
  6. go入门环境配置
  7. RestTemplate请求https忽略证书认证
  8. MySQL安装的N种方式
  9. NOIP2018小反思
  10. UVALive-3713 Astronauts (2-SAT)