目录
概念阐述
序列化是指将对象转化为可存储或可传输的数据格式,例如将 Python 对象转化为二进制、JSON 或 XML 等格式,以便于将其存储到文件中或在网络上传输。在Python中,可以使用pickle、json、msgpack(第三方模块)进行序列化。
反序列化则是将序列化后的数据恢复成原来的对象。也就是将二进制、JSON 或 XML 等格式的数据转化为 Python 对象。同样在Python中,可以使用 pickle、json、msgpack等模块进行反序列化。
pickle
(1) 介绍:
pickle是一个内置模块,仅需导入即可使用
pickle主要围绕字节流来序列化和反序列化
因为其围绕字节流,所以相对相应的文件读写要使用'wb'和'rb'
虽然其序列化的是字节流(二进制数据流),但是是python中独有的编码方式数据,并不通用与其他编程语言
(2) 以下是一些相关方法:
dumps(obj):将python对象转换为bytes对象(序列化为字节流)返回
loads(obj):将序列化的字节流数据反序列化为python对象返回
dump(obj,file):将python对象转换为bytes对象,并写入文件中(序列化为字节流并写入文件)
load(file,obj):读取文件中字节流数据并反序列化为python对象返回
(3) 建议将pickle序列化数据保存的文件名以.pkl或.pikcle来命名
(4) 以下是一些示例:import pickle text = {'name':'joden'} with open('./t1.pickle','wb') as f: pickle.dump(text,f) with open('./t1.pickle','rb') as f: data = pickle.load(f) print(data)
json
(1) 介绍:
json是一个内置模块,仅需导入即可使用
json主要围绕json格式字符串来序列化和反序列化
json相对相应的文件读写仅需使用'w'和'r'
json是一种规定的用于交换传输的文本格式,可以在不同编程语言中使用
(2) 以下是一些相关方法:
dumps(obj):将python数据序列化为json格式字符串返回
loads(obj):将json格式字符串反序列化为python对象返回
dump(obj,f):将python对象序列化为json格式字符串,并保存到文件中
load(f):读取文件中的json数据并反反序列化为python对象返回(3) 建议将json序列化数据保存的文件名以.json来命名
(4) 以下是一些示例:
import json text = {'name':'joden'} with open('./t1.json','w') as f: json.dump(text,f) with open('./t1.json','r') as f: data = json.load(f) print(data)
msgpack
(1) 介绍:
msgpack是一个第三方序列化库,使用前需要安装
msgpack围绕通用的二进制数据流来进行序列化和反序列化
msgpack序列化的数据有很好的跨平台性和语言兼容性
msgpack序列化效率更高、更省内存
(2) 以下是一些相关方法:
packb(obj)/dumps(obj):将python对象序列化为bytes对象返回
unpackb(bytes)/loads(bytes):将bytes对象反序列化为python对象返回
pack(obj,stream)/dump(obj,stream):将python对象序列化为bytes对象并写入steam流中
unpack(stream)/load(stream):从stream流中读取bytes对象并反序列化为python对象返回
(3) 以下是stream参数的可选值(io.IOBase子类对象):
io.FileIO:二进制文件对象
ioTextIOBase:文本文件基类
io.BytesIO:二进制内存文件对象
ioStringIO:字符串内存文件对象
ioBufferedIOBase:缓冲区文件基类
ioBufferedRandom:缓冲区随机文件访问基类
ioBufferedReader:缓冲区二进制读文件类(常用的读文件)
ioBufferedWriter:缓冲区二进制写文件类(常用的写文件)
callback:指定的回调函数中,回调函数将接受序列化数据进行处理
(3) 建议将序列化数据保存的文件名以.msgpack来命名
(4) 以下是一些示例:import msgpack data = {'name': 'joden'} # 创建一个文件流(ioBufferedWriter),并序列化写入 with open('data.msgpack', 'wb') as f: msgpack.pack(data, f)