Python 中的序列化是指将内存中的对象转换成可存储或可传输的数据格式。Python 中常用的序列化格式有两种:pickle 和 JSON。下面就分别从它们两个的用法、优缺点以及注意事项进行详细的讲解。
使用pickle进行序列化
pickle 是 Python 自带的序列化模块,它可以将 Python 对象序列化成一个二进制对象(也就是字符串),并可以将该二进制对象转换成原本的 Python 对象。
以下是使用 pickle 进行序列化的示例代码:
import pickle
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person('张三', 18)
serial_data = pickle.dumps(person)
print(serial_data)
deserial_data = pickle.loads(serial_data)
print(deserial_data.name, deserial_data.age)
输出结果:
b'\x80\x04\x95\x15\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x06Person\x94\x93\x94)\x81\x94}\x94(\x8c\x04name\x94\x8c\x06\xe5\xbc\xa0\xe4\xb8\x89\x94\x8c\x03age\x94K\x12ub.'
张三 18
可以看到,pickle 序列化后的结果是一个二进制字符串,读起来比较困难,但是在网络传输或存储中是很方便的。同时,我们可以用 pickle.loads() 方法把这个二进制字符串转换成原来的 Python 对象。
然而,pickle 也有其缺点之一:pickle 序列化的结果只能被 Python 程序所识别,不能跨语言地传递。
使用JSON进行序列化
JSON 是一种跨语言的轻量级文本数据交换格式,它可以被 Python、Java、PHP、JavaScript 等多种语言所解析。
以下是使用 JSON 进行序列化的示例代码:
import json
person = {'name': '张三', 'age': 18}
serial_data = json.dumps(person)
print(serial_data)
deserial_data = json.loads(serial_data)
print(deserial_data['name'], deserial_data['age'])
输出结果:
{"name": "\u5f20\u4e09", "age": 18}
张三 18
可以看到,JSON 序列化后的结果是一个字符串。JSON 序列化虽然能够跨语言地传递数据,但是它对于复杂的 Python 对象处理不够方便,而且它只支持部分 Python 对象的序列化,例如:list、tuple、dict、int、float、True 和 False 等。
综上所述,使用 pickle 序列化数据可以方便地序列化 Python 对象,但是只能被 Python 程序所识别;使用 JSON 序列化数据可以跨语言地传递数据,但是对于复杂的 Python 对象处理不够方便。我们可以根据实际情况选择不同的序列化方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python 序列化结果 - Python技术站