详解Python 序列化Serialize 和 反序列化Deserialize
序列化(Serialization)是将数据结构或对象状态转换为可以存储或传输的格式的过程。在网络传输、数据存储和编程中经常会使用序列化。Python提供了可以方便地序列化和反序列化数据的标准库模块。
序列化
Python常用的序列化方式有两种:pickle和json。
Pickle
Pickle是一种Python特有的序列化模块,可以将Python中的数据类型转换为序列化后的字节流,也可以反序列化将字节流转换为Python中的数据类型。
下面是一个使用Pickle将Python对象进行序列化的示例:
import pickle
data = [1, 2, 3, {'a': 1, 'b': 2, 'c': 3}]
pickle_data = pickle.dumps(data)
print(pickle_data)
输出结果为:
b'\x80\x04\x95\x1c\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03\x8e\x94}\x94(\x8c\x01a\x94K\x01\x8c\x01b\x94K\x02\x8c\x01c\x94K\x03uu.'
通过pickle.dumps()方法将列表data序列化为字节流,结果为二进制类型。使用pickle.loads()方法将字节流转换为Python数据类型。
pickle_data = b'\x80\x04\x95\x1c\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03\x8e\x94}\x94(\x8c\x01a\x94K\x01\x8c\x01b\x94K\x02\x8c\x01c\x94K\x03uu.'
data = pickle.loads(pickle_data)
print(data)
输出结果为:
[1, 2, 3, {'a': 1, 'b': 2, 'c': 3}]
JSON
JSON是一种轻量级的数据交换格式,支持几乎所有编程语言。Python提供了json模块可以方便地进行JSON字符串和Python数据类型的转换。JSON序列化和反序列化比pickle更安全,可以跨平台使用。
下面是一个使用json将Python对象进行序列化的示例:
import json
data = {'name': 'Tom', 'age': 18, 'skills': ['Python', 'Java', 'C']}
json_data = json.dumps(data)
print(json_data)
输出结果为:
{"name": "Tom", "age": 18, "skills": ["Python", "Java", "C"]}
通过json.dumps()方法将字典data序列化为JSON字符串,结果为字符串类型。使用json.loads()方法将JSON字符串转换为Python数据类型。
json_data = '{"name": "Tom", "age": 18, "skills": ["Python", "Java", "C"]}'
data = json.loads(json_data)
print(data)
输出结果为:
{'name': 'Tom', 'age': 18, 'skills': ['Python', 'Java', 'C']}
反序列化
与序列化对应的是反序列化(Deserialization),将序列化后的字节流或JSON字符串转换为Python数据类型。
下面分别介绍使用Pickle和JSON进行反序列化的方法。
Pickle
使用pickle进行反序列化需要使用pickle.loads()方法,将序列化后的字节流转换为Python数据类型。
import pickle
pickle_data = b'\x80\x04\x95\x1c\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03\x8e\x94}\x94(\x8c\x01a\x94K\x01\x8c\x01b\x94K\x02\x8c\x01c\x94K\x03uu.'
data = pickle.loads(pickle_data)
print(data)
输出结果为:
[1, 2, 3, {'a': 1, 'b': 2, 'c': 3}]
JSON
使用json进行反序列化需要使用json.loads()方法,将序列化后的JSON字符串转换为Python数据类型。
import json
json_data = '{"name": "Tom", "age": 18, "skills": ["Python", "Java", "C"]}'
data = json.loads(json_data)
print(data)
输出结果为:
{'name': 'Tom', 'age': 18, 'skills': ['Python', 'Java', 'C']}
总结
序列化和反序列化是网络传输和数据存储中常用的技术。Python中提供了pickle和json模块方便地进行序列化和反序列化操作,开发者可以根据需求选择使用适合的序列化方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python 序列化Serialize 和 反序列化Deserialize - Python技术站