python基础 pickle对象序列化

pickle python对象序列化

什么是序列化

序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。 在序列化期间,对象将其当前状态写入到临时或持久性存储区。 以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化。 “Pickling” 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 “unpickling” 是相反的操作,会将(来自一个 binary file 或者 bytes-like object 的)字节流转化回一个对象层次结构。Pickling(和 unpickling)也被称为“序列化”, “编组” 1 或者 “平面化”。而为了避免混乱,此处采用术语 “pickling” 和 “unpickling”。

可以打包/解包的对象
  • NoneTrueFalse
  • 整数、浮点数、复数
  • str、byte、bytearray
  • 只包含可打包对象的集合,包括 tuple、list、set 和 dict
  • 定义在模块顶层的函数(使用 def 定义,lambda 函数则不可以)
  • 定义在模块顶层的内置函数
  • 定义在模块顶层的类
  • 某些类实例,这些类的 __dict__ 属性值或 __getstate__() 函数的返回值可以被打包
常用函数:
pickle.dump(object, file)
pickle.dumps(object) -> string
pickle.load(file) -> object
piclke.loads(string) -> object

import pickle 
obj=['this is a stirng',34,{1:2},None]
Serialization_obj=pickle.dumps(obj)
print(Serialization_obj)// b'\x80\x03]q\x00(X\x10\x00\x00\x00this is a stirngq\x01K"}q\x02K\x01K\x02sNe.'
objj=pickle.loads(Serialization_obj)
print(objj)// ['this is a stirng', 34, {1: 2}, None]

dumps()函数将对象序列化为二进制字节流

load()函数将二进制字节流反序列化为对象

import pickle 

obj=['this is a stirng',34,{1:2},None]
pickle.dump(obj,open('obj.pkl','wb')) // 将obj直接序列化为obj.pkl文件
objj=pickle.load(open('obj.pkl','rb'))// 将obj.pkl 文件反序列化为对象
print(objj)//['this is a stirng', 34, {1: 2}, None]

你可能感兴趣的:(python,python)