pickle、shelve,python私有,支持所有python数据类型

一、pickle

dic={'name':'egon','age':18}

print(pickle.dumps(dic))    ##得到的是一个bets类型数据

with open('d.pickle','wb') as f:      #bets类型需要用wb模式打开
f.write(pickle.dumps(dic)) #序列化 ##反序列化
with open('d.pickle','rb') as f: #bets类型需要用b模式打开
data=pickle.loads(f.read())
print(data['name'])

简单版本: 


##1、第一步
dic = {'name': 'egon', 'age': 18}
pickle.dump(dic, open('e.pickle', 'wb')) ##第二步,可以在其它py程序中实现反序列化
data = pickle.load(open('e.pickle', 'rb'))
print(data['name'])

用json来序列化函数?
def func():
print('from func') import json json.dump(open('s.json','w')) 注意报错:说,函数不是一个json可序列化的对象
用plckle来序列化函数?

def func():
print('from func') import pickle print(pickle.dumps(func)) #b'\x80\x03c__main__\nfunc\nq\x00.' :pickle可以序列化函数 pickle.dump(func,open('func.pickle','wb')) #序列化函数 ###然后去 pickle_反序列化.py文件里把函数反序列化出来

 

报错AttributeError: Can't get attribute 'func' on <module '__main__' from 
'D:/python-笔记/day5/pickle_module/pickle_反序列化.py'> 注意:序列化的时候是序列化的内存地址,没有把函数的值序列化进去,如果反序列化的时候找不到内存地址,会报错。

 

序列化类

# class Foo:
# pass
#
#
# obj1=Foo()
# obj2=Foo()
#
# #### print(obj1 is obj2) #False
# #### 需求:把两个对象保存下来
#
# pickle.dump(obj1,open('class_obj1.pickle','wb'))
# pickle.dump(obj2,open('class_obj2.pickle','wb')) #成功序列化类 问题来了,反序列化怎么做,把上面的class Foo,obj1=Foo()obj2=Foo() 全部注释掉 import pickle pickle.load(open('class_obj1.pickle','rb')) #报错,因为Foo不存在了,无法反序列化

二、shelve

1、shelve_模块从文件中取数据

import shelve

obj=shelve.open(r'sheve.shl')    #取数据的时候只需要记住文件名,打开这个文件会得到一个对象,赋值给obj
print(obj['xiechao'])
print(obj['wangyanli']) for i in obj:
print(i,obj[i]) #得出来的是字典的k,v obj.close() #最后别忘记了关闭

二、shelve_模块保存数据到文件

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

注意:shelve只支持python ,不能跨平台

import shelve

f = shelve.open(r'sheve.shl')  #可以写一个文件路径

##需要把谢超的信息永久存放下来

f['xiechao']={'age':18,'pwd':'0621'}
f['wangyanli']={'age':22,'pwd':'0621'}
f['zhujingjing']={'age':34,'pwd':'0621'}
f['jingjingzhu']={'age':44,'pwd':'0621'}
f['jingjingZH']={'age':43,'pwd':'0621'} #写完直接自动保存到文件里去了 f.close()

shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型  

import shelve

f=shelve.open(r'sheve.txt')
# f['stu1_info']={'name':'egon','age':18,'hobby':['piao','smoking','drinking']}
# f['stu2_info']={'name':'gangdan','age':53}
# f['school_info']={'website':'http://www.pypy.org','city':'beijing'} print(f['stu1_info']['hobby'])
f.close()

  

  

最新文章

  1. 使用TSQL查询和更新 JSON 数据
  2. js实现继承的方式总结
  3. jquery from提交和post提交
  4. mailto: HTML e-mail 链接
  5. 操作系统中的IPC机制
  6. 二叉树的遍历(递归,迭代,Morris遍历)
  7. notepad++代码折叠对应的树形结构快捷键
  8. Java 动态编译组件 &amp; 类动态加载
  9. Table of Contents - jBPM
  10. Android 自定义View高级特效,神奇的贝塞尔曲线
  11. cache 的设计与实现--转载
  12. JavaScript prototype.js提升JavaScript开发效率
  13. 外设:K9F2G08 nandflash 底层读写、控制驱动程序,可随机读写
  14. java swing组件的一些基本属性
  15. Android SQLite与ListView的简单使用
  16. tp5命令行
  17. 玩儿虫那些事(四)—— 使用curl
  18. RabbitMQ总结
  19. 【深入分析Java Web技术内幕】2、深入分析Java I/O的工作机制
  20. 静态编译 Qt5.7.0 (含 openssl 支持)

热门文章

  1. 网站被攻击扫描SQL注入的日常记录
  2. EL表达式如何读取一个string型的list 一个单纯的的字符串list
  3. 下载android4.4.2源代码全过程(附已下载的源代码)
  4. Redis之高可用、集群、云平台搭建
  5. GYM 101350 F. Monkeying Around
  6. LUOGU P2827 蚯蚓 (noip 2016)
  7. 关于502 bad gateway报错的解决办法
  8. arcgis信息窗口
  9. arcgis显示经纬度
  10. Linux SSH远程链接 短时间内断开