Python基础教程

009_pickle序列化与反序列化

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']}
这篇文章对您有用吗?

我们要如何帮助您?