目录
pickle序列化与反序列化
把变量从内存中变成可存储或传输的过程称之为序列化,反之称为反序列化。
内存中的变量是二进制形式,序列化是把二进制数据直接变为可存储或传输对象。
pickle序列化与反序列化主要方法
Python标准库中有pickle模块,用于Python对象序列化。
- 序列化(写入文件):pickle.dump()
- 反序列化(读取文件):pickle.load()
- 序列化(写到内存bytes对象):pickle.dumps(),不推荐
- 反序列化(读取内存中bytes对象):pickle.loads(),不推荐
下面在工程中创建脚本文件t07.py,内容如下
pickle序列化写入文件
将Python对象"alist"序列化到文件“mylist”中
import pickle
alist=[1,2,3,4,5]
with open("mylist","wb") as f: # 注意,二进制文件操作模式要用b
pickle.dump(alist,f)
程序运行之后,工程目录中会生成一个二进制文件“mylist”,用记事本打开,里面是乱码。
pickle反序列化读取文件
在工程中创建脚本文件t08.py,编写反序列化程序,内容如下
import pickle
with open("mylist","rb") as f:
blist=pickle.load(f)
print(blist) # [1, 2, 3, 4, 5]
字典对象dict的序列化与反序列化
下面修改程序,对dict对象进行序列化。
脚本文件t07.py,将Python对象"person"序列化到文件“mydict”中,内容如下。
import pickle
person={
"name":"张三",
"age":18,
"work":["公司1","公司2"]
}
with open("mydict","wb") as f:
pickle.dump(person,f)
脚本文件t08.py,编写反序列化程序,内容如下
import pickle
with open("mydict","rb") as f:
person=pickle.load(f)
print(person) # {'name': '张三', 'age': 18, 'work': ['公司1', '公司2']}