Python序列化指将Python对象转换为可存储或传输的格式,例如将Python对象序列化为JSON或二进制格式。序列化后的结果可以在不同的系统之间传输,并且可以在以后重新导入到Python对象中。
Python提供了两种常用的序列化/反序列化工具:pickle和json。
Pickle序列化/反序列化
Pickle是Python的标准序列化库,它可以将Python对象转换为二进制流,并且可以将这个流重新解析成 Python对象。Pickle的主要缺点是无法支持跨语言的序列化和反序列化。
Pickle 序列化
Pickle序列化有两种模式:
- dump:直接将对象序列化为二进制格式并写入文件。
“`python
import pickle
lst = [‘hello’, 123, [4, 5, 6]]
with open(‘data.pkl’, ‘wb’) as f:
pickle.dump(lst, f)
“`
- dumps:将对象序列化为二进制格式并返回二进制数据,无需写入文件。
“`python
import pickle
lst = [‘hello’, 123, [4, 5, 6]]
data = pickle.dumps(lst)
“`
Pickle 反序列化
- load:从文件中读取二进制数据并将其解析为Python对象。
“`python
import pickle
with open(‘data.pkl’, ‘rb’) as f:
lst = pickle.load(f)
“`
- loads:将二进制数据解析为Python对象。
“`python
import pickle
data = b’\x80\x04\x95\x11\x00\x00\x00\x00\x00\x00\x00]\x94\x8c\x05hello\x94K{\x8c\x07my_list\x94\x93\x94\x8c\x01a\x94K\x04\x8c\x01b\x94K\x05\x8c\x01c\x94K\x06eu.’
lst = pickle.loads(data) # [‘hello’, {‘my_list’: [4, 5, 6], ‘a’: 4, ‘b’: 5, ‘c’: 6}]
“`
JSON 序列化/反序列化
JSON是一种轻量级数据交换格式,它与Python之间的转换更快和更广泛使用。与pickle相比,JSON有更多的跨语言使用场景。
JSON 序列化
- dump:直接将对象序列化为JSON字符串并写入文件。
“`python
import json
lst = [‘hello’, 123, [4, 5, 6]]
with open(‘data.json’, ‘w’) as f:
json.dump(lst, f)
“`
- dumps:将对象序列化为JSON字符串并返回字符串。
“`python
import json
lst = [‘hello’, 123, [4, 5, 6]]
data = json.dumps(lst)
“`
JSON 反序列化
- load:从文件中读取JSON字符串并将其解析为Python对象。
“`python
import json
with open(‘data.json’, ‘r’) as f:
lst = json.load(f)
“`
- loads:将JSON字符串解析为Python对象。
“`python
import json
data = ‘[“hello”, 123, [4, 5, 6]]’
lst = json.loads(data) # [‘hello’, 123, [4, 5, 6]]
“`
总结
通常我们需要将Python对象保存到文件中,或者在网络传输时进行序列化,而pickle和json是Python常用的序列化工具。使用pickle序列化可以直接将对象转换为二进制格式的数据存储,而使用JSON序列化可以将对象转换为JSON字符串方便在网络中的传输。同时与pickle相比,JSON有更多的跨语言使用场景。