python-pickle

 · 2020-5-4 · 次阅读


摘自:pickle模块学习
python的学习主要学习其中的库与函数。

因而看一下pickle模块的相关函数。

pickle.dump(obj,file[,protocol]) ->php的serialize
序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,
表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。

pickle.load(file) ->php的unserialize

反序列化对象。将文件中的数据解析成一个python对象

pickle.dumps(obj[,protocol])
作用:将obj对象序列化为string形式而不是存入文件中
protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本

pickle.loads(string)
从string中读取序列化前的obj对象

所以我上面写的映射略有问题,python的文件化和字符化分的还是很清楚的。下面会提到分别叫做python对象的持久化以及python对象串行化

import StringIO  #导入Iostring
import pickle  #导入反序列化模块pickle

#创建一个class类
class Person:
    #定义一个初始化函数,用于初始化变量的值与类中值的关系
    def __init__(self,n,a):
        self.name=n
        self.age=a
    #定义一个打印函数允许其他的对象来调用并打印信息
    def show(self):
        print self.name+"_"+str(self.age)
aa = Person("JGood", 2)
aa.show()
fle = StringIO.StringIO()
pick = pickle.Pickler(fle)
pick.dump(aa)
val1=fle.getvalue()
print len(val1)
pick.clear_memo()
pick.dump(aa)
val2=fle.getvalue()
print len(val2)
fle.close()

pickle模块的作用

将字典、列表、字符串等对象进行持久化,存储到磁盘上,方便以后使用
那么什么是持久化?
对象持久化

如果希望透明地存储python对象,而不丢失其身份和类型等信息,则需要某种形式的对象序列化:它是一个将人一复杂的对象转成对象的文本或二进制表示的过程。同样,必须能够将对象经过序列化后的形式恢复到原有的对象。在Python中,这种序列化过程称为pickle,可以将对象pickle成字符串、磁盘上的文件或者任何类似于文件的对象,也可以将这些字符串、文件或任何类似于文件的对象unpickle成原来的对象。

python对象串行化
pickle模块将任意一个python对象转换成一系统字节的这个操作过程叫做串行化对象