pickle模块介绍
788 字
4 分钟
pickle模块介绍
【一】什么是pickle模块
- pickle 模块是 Python 内置的一个序列化和反序列化的模块,它可以将 Python 对象转换为字节流,也可以将字节流转换回 Python 对象。
- 这些操作通常被称为序列化和反序列化。
【二】序列化和反序列化
【1】序列化
- 序列化是指将 Python 对象转换为可以存储在文件、数据库或者网络传输的数据格式的过程。
- 序列化后得到的结果通常是字节流形式的数据,这种数据可以方便地进行存储和传输。
【2】反序列化
- 反序列化则是指将字节流形式的数据恢复为原来的 Python 对象的过程。
- 在反序列化过程中,Python 解释器会按照一定的规则解析字节流,并根据字节流的内容创建出与之对应的 Python 对象。
【三】常用的方法介绍
【1】Python对象和pickle对象互转
- pickle 模块提供了一系列的方法和类来实现序列化和反序列化操作。
- 其中最常用的方法是 pickle.dumps() 和 pickle.loads()。
- pickle.dumps() 方法接受一个 Python 对象作为参数,返回一个字节流,表示该对象的序列化结果。
- pickle.loads() 方法接受一个字节流作为参数,返回一个 Python 对象,表示该字节流的反序列化结果。
import pickle
# 【一】将Python中的字典类型序列化成pickle的字节流
# 【1】字典类型user_dict = pickle.dumps({'name': 'dream'})print(user_dict, type(user_dict))# b'\x80\x04\x95\x13\x00\x00\x00\x00\x00\x00\x00}\x94\x8c\x04name\x94\x8c\x05dream\x94s.' <class 'bytes'>
# 【2】字符串类型user_str = pickle.dumps('hello world')print(user_str, type(user_str))# b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00\x8c\x0bhello world\x94.' <class 'bytes'>
# 【3】整数类型user_int = pickle.dumps(123)print(user_int, type(user_int))# b'\x80\x04K{.' <class 'bytes'>
# 【4】浮点数类型user_float = pickle.dumps(3.14)print(user_float, type(user_float))# b'\x80\x04\x95\n\x00\x00\x00\x00\x00\x00\x00G@\t\x1e\xb8Q\xeb\x85\x1f.' <class 'bytes'>
# 【5】布尔类型user_bool = pickle.dumps(True)print(user_bool, type(user_bool))# b'\x80\x04\x88.' <class 'bytes'>
# 【6】元组类型user_tuple = pickle.dumps((1, 2, 3))print(user_tuple, type(user_tuple))# b'\x80\x04\x95\t\x00\x00\x00\x00\x00\x00\x00K\x01K\x02K\x03\x87\x94.' <class 'bytes'>
# 【7】列表类型user_list = pickle.dumps([1, 2, 3])print(user_list, type(user_list))# b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03e.' <class 'bytes'>
# 【8】集合类型user_set = pickle.dumps({1, 2, 3})print(user_set, type(user_set))# b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00\x8f\x94(K\x01K\x02K\x03\x90.' <class 'bytes'>【2】Python对象和pickle对象读写
import pickle
# 【二】数据的读写def save_data(path, mode='wb', data=None): with open(path, mode) as fp: pickle.dump(data, fp) print(f'当前已保存!保存路径为:{path}!')
def load_data(path, mode='rb'): with open(path, mode) as fp: data = pickle.load(fp) return data
# 【1】序列化写入 Python独有的类class Student(object): def __init__(self, name, age, grade): self.name = name self.age = age self.grade = grade
student = Student('张三', 18, '高三')# 将实例化好的对象写入到指定文件# save_data(path='Student', data=student)# 将保存好的数据读出来,可以直接使用student_data = load_data(path='Student')print(student_data) # <__main__.Student object at 0x109277eb0>print(student_data.name) # 张三print(student_data.age) # 18【四】pickle的弊端
- 需要注意的是,pickle 模块并不安全,因为它可以序列化任何 Python 对象,包括内置类型、自定义类的对象等。
- 这使得 pickle 模块有可能成为攻击者攻击的目标。
- 例如,攻击者可以通过构造恶意的 pickle 数据包,将其发送给受害者,导致受害者执行任意代码。
- 因此,如果可能的话,应该尽量避免使用 pickle 模块,或者至少要确保输入的数据来自可信的来源。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
C 语言发展史
编程语言了解 C 语言从 BCPL、B 语言到现代标准 C 的发展历程、核心特点与应用领域。
2
C 语言开发环境的安装与配置
编程语言在 Windows、Linux 与 macOS 上安装 C 工具链,配置编辑器,并编译运行第一个 C 程序。
3
C 语言初识:程序运行机制与基本结构
编程语言认识 C 程序从源代码到运行的完整流程,以及基础语法和程序的基本结构。
4
C 语言基础:注释、关键字、变量与数据类型
编程语言学习 C 语言的注释、关键字、标识符、常量、变量和基本数据类型等基础知识。
5
C 语言数据类型
编程语言理解 C 语言的数据类型体系,包括基本类型、整数类型、浮点类型和逻辑类型。
随机文章随机推荐














