python--使用pickle序列化对象
pickle序列化对象
如果希望透明地存储 Python 对象,而不丢失其身份和类型等信息,则需要某种形式的对象序列化:它是一个将任意复杂的对象转成对象的文本或二进制表示的过程。
同样,必须能够将对象经过序列化后的形式恢复到原有的对象。在 Python 中,这种序列化过程称为 pickle,
可以将对象 pickle 成字符串、磁盘上的文件或者任何类似于文件的对象,也可以将这些字符串、文件或任何类似于文件的对象 unpickle 成原来的对象
代码实例
import pickle
class MyPickle(object): def __init__(self,file_name):
self.file_name = file_name def dump(self,obj):
"""
序列化对象
:param obj:
:return:
"""
with open(self.file_name,'ab') as f:
pickle.dump(obj, f)
print('dump data',obj.__dict__) def loaditer(self):
"""
迭代反序列化对象
:return:
"""
f = open(self.file_name, 'rb')
while True:
try:
obj = pickle.load(f)
yield obj
except EOFError:
print('EOFError')
f.close()
print(f.closed)
break class Person:
def __init__(self,n,a):
self.name=n
self.age=a
def show(self):
print(self.name+"_"+str(self.age) ) aa = Person("aGood", 2)
bb = Person("bGood",3)
cc = Person("cGood",4) p = MyPickle('c.txt')
p.dump(aa)
p.dump(bb)
p.dump(cc) iter_obj = p.loaditer()
while True:
try:
print(next(iter_obj).__dict__)
except StopIteration:
print('stop')
break
输出结果
dump data {'name': 'aGood', 'age': 2}
dump data {'name': 'bGood', 'age': 3}
dump data {'name': 'cGood', 'age': 4}
{'name': 'aGood', 'age': 2}
{'name': 'bGood', 'age': 3}
{'name': 'cGood', 'age': 4}
EOFError
True
stop
python--使用pickle序列化对象的更多相关文章
- python使用pickle序列化对象读取输出二进制文件
import pickle class tick: name = '牛牛牛' age = 10 samp = [1,2,3,'aaa',[12,3],tick()] with open('te.xxx ...
- 从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞
从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞 pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 其本质是Picklin ...
- pickle 序列化对象
# 序列化对象 import pickle mylist=[[1,2,3,4,5,6,7],["abc","xyz","hello"],[1 ...
- python 实用pickle序列化
存储数据结构到一个文件中称为序列化.相json这样的格式需要定制的序列化数据的转换器.python提供了pickle模块以特殊的二进制格式保存和恢复数据对象. 还记得json解析datetime对象时 ...
- 一文了解Python常见的序列化操作
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
- python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)
1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...
- python 跨语言数据交互、json、pickle(序列化)、urllib、requests(爬虫模块)、XML。
Python中用于序列化的两个模块 json 用于[字符串]和 [python基本数据类型] 间进行转换 pickle 用于[python特有的类型] 和 [python基本数据类型]间进 ...
- pickle 数据对象的序列化和反序列化
python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...
- Python之数据序列化(json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
随机推荐
- PHP的设计模式之工厂模式
以前写代码老觉得,搞那么多乱七八槽的设计模式干嘛啊,这不是自己找罪受嘛.现在在这次的API开发过程中才晓得设计模式的厉害,真的是境界不到,永远不能领悟呀.还好坚持编码这么久,终于进入设计模式的运用了, ...
- 2018.11.05 NOIP模拟 相交(dfs序+bit)
传送门 又TMTMTM考原题真是服. 考虑到两条路径相交一定满足某一条的lcalcalca在另外一条路径上面. 于是分开统计有多少个lcalcalca在当前路径上面以及有多少个路径经过了当前的lcal ...
- PHP中奖概率实现
$prize_arr = array( '0' => array('id'=>1,'prize'=>'elm_1','rate'=>1), '1' => array('i ...
- poj-3067(树状数组)
题目链接:传送门 题意:日本有东城m个城市,西城m个城市,东城与西城相互连线架桥,判断这些桥相交的次数. 思路:两个直线相交就是(x1-x2)*(y1-y2)<0,所以,对x,y进行排序,按照x ...
- websocket项目电子签字使用场景
场景描述:进入页面时,如果设置强制签字,发送签字webSocket连接,同时页面有个重新签字按钮,这个按钮会多次调用 第一步:先建立一个websocket的js文件,名叫signSocket.js内容 ...
- C# 中使用面向切面编程(AOP)中实践代码整洁(转)
出处:https://www.cnblogs.com/chenug/p/9848852.html 1. 前言 最近在看<架构整洁之道>一书,书中反复提到了面向对象编程的 SOLID 原则( ...
- 微信小程序 js结构
// pages/index/index.js Page({ /** * 页面的初始数据 */ data: { }, /** * 生命周期函数--监听页面加载 */ onLoad: function ...
- 乌龙之MySQL slave IO status:connecting
搭建了一个主从,状态一直如下: 检查错误日志报错如下: review搭建过程,语法并没有问题. 检查用户及网络,也没有问题: so?what is the cause ? 等等....貌似上面搭建用的 ...
- C#系列之{流和序列化}
不论何种类型的文件都可以表示为一个字节数组.(Byte[]) 一.文件复制 (示例) 首先建立一个类似管道的东西将文件和内存中的程序连接,并将文件按字节发送.为了保存接收到的文件字节,需要创建一个字节 ...
- 安装BouncyCastle
对于Windows而言 将bcprov-jdk16-146.jar 复制到C:\Program Files\Java\jre6\lib\ext和C:\jdk1.6.0\jre\lib\ext目录下: ...