Python文件的应用之序列化与反序列化详解
什么是序列化?
序列化(Serialization)是指将对象的状态转换为可以存储或传输的形式的过程,通常将对象序列化为字节流或文本流的形式。在将对象传输或存储的时候,需要对其进行序列化,以便于传输或保存到磁盘中。在 Python 中,序列化的实现通常采用 pickle 模块。
序列化的基本使用
将对象序列化为字节流
下面是一个将 Python 对象序列化为字节流的简单示例:
import pickle
# 定义一个简单的数据结构
user_info = {
'name': '张三',
'age': 25,
'gender': 'male'
}
# 将 Python 对象 user_info 序列化为字节流
user_info_bytes = pickle.dumps(user_info)
print(user_info_bytes)
将上述代码保存到 Python 代码文件中,例如文件名为 serialize_demo.py
,然后在命令行中运行 python3 serialize_demo.py
,可以看到以下输出结果:
b'\x80\x04\x95\x1b\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x06\xe5\xbc\xa0\xe4\xb8\x89\x94\x8c\x03age\x94K)\x8c\x06gender\x94\x8c\x04male\x94ub.'
其中,b''
表示字节串类型,\x
表示一个 16 进制字符,这就是字节流的形式。
将对象序列化为文本流
将 Python 对象序列化为文本流,也就是将序列化后的字节流进行 base64 编码,如下示例所示:
import pickle
import base64
# 定义一个简单的数据结构
user_info = {
'name': '张三',
'age': 25,
'gender': 'male'
}
# 将 Python 对象 user_info 序列化为文本流
user_info_str = base64.b64encode(pickle.dumps(user_info)).decode('utf-8')
print(user_info_str)
运行上述代码,输出结果如下:
gASVcQAAAAAAAAB9lE0KUXRyYWNlSW5mb3JtAAjaB1gAX11VA2phZGVzYQpxA2dlbmRlcgpxA3RpdGxlcQNVbmFtZQRyzgX/////OM17hnEGHc1LgX//////////8=",
反序列化的基本使用
将字节流反序列化为 Python 对象
下面是一个将字节流反序列化为 Python 对象的简单示例:
import pickle
# 定义一个简单的数据结构
user_info = {
'name': '张三',
'age': 25,
'gender': 'male'
}
# 将 Python 对象 user_info 序列化为字节流
user_info_bytes = pickle.dumps(user_info)
# 将字节流反序列化为 Python 对象
user_info_obj = pickle.loads(user_info_bytes)
print(user_info_obj)
运行上述代码,输出结果如下:
{'name': '张三', 'age': 25, 'gender': 'male'}
将文本流反序列化为 Python 对象
将文本流反序列化为 Python 对象,也就是将序列化后的 base64 编码解码为字节流,然后对其进行反序列化,如下示例所示:
import pickle
import base64
# 定义一个简单的数据结构
user_info = {
'name': '张三',
'age': 25,
'gender': 'male'
}
# 将 Python 对象 user_info 序列化为文本流
user_info_str = base64.b64encode(pickle.dumps(user_info)).decode('utf-8')
# 将文本流反序列化为 Python 对象
user_info_obj = pickle.loads(base64.b64decode(user_info_str.encode('utf-8')))
print(user_info_obj)
运行上述代码,输出结果如下:
{'name': '张三', 'age': 25, 'gender': 'male'}
通过上述示例,我们可以发现序列化和反序列化都是非常简单的操作,而且在 Python 中已经有了很方便的实现方式。当我们需要传输或者存储某些对象时,很容易就可以使用 Python 的序列化工具来实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python文件的应用之序列化与反序列化详解 - Python技术站