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