当前位置: 首页 > news >正文

Python 常用模块pickle

Python 常用模块pickle

pickle序列化模块

【一】定义

  • 序列化:将数据结构或对象转换为可存储或传输的格式
  • 反序列化:将序列化后的数据恢复为开始的数据结构或者对象

【二】目的

  • 数据持久化存储
  • 远程通信
  • 缓存
  • 进程间通信

【三】序列化

  • 将对象转换为字节流的过程称为序列化
  • pickle.dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None)
  • pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)
    • obj:要序列化的对象
    • file:一个文件对象,通常以二进制写入模式打开文件
    • protocol:序列化的版本号,可以省略,默认(None)最高版本
    • fix_imports:为True默认,尝试自动修复在不同Python版本之间可能的模块导入问题
    • buffer_callback:一个可选的回调函数,用于控制内部缓冲区的分配。默认使用内部缓冲区管理
import pickleuser_dict = {"name": "bruce", "age": "18"}str_dict = pickle.dumps(user_dict)
print(str_dict)
print(type(str_dict))
# b'\x80\x04\x95\x1f\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x05bruce\x94\x8c\x03age\x94\x8c\x0218\x94u.'
# <class 'bytes'>
with open("a.pkl", "wb") as fp:pickle.dump(user_dict, fp)
# pickle.dump(user_dict, open("a.pkl", "wb"))

【四】反序列化

  • 将字节流还原成对象的过程称为反序列化
  • pickle.loads(data, *, fix_imports=True, encoding="ASCII", errors="strict"buffers=None)
  • pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict",buffers=None)
    • data:要序列化的字节流内容
    • file:一个文件对象,通常以二进制读取模式打开文件
    • fix_imports:为True默认,尝试自动修复在不同Python版本之间可能的模块导入问题
    • encoding:字符串编码格式
    • errors:解码错误的处理方式,与str.decode()方法中的参数相同。默认strict,即抛出UnicodeDecodeError
    • buffers:一个可选的PickleBuffer对象,用于提供自定义缓冲区的支持,默认None
import picklewith open("a.pkl", "rb") as fp:read_dict = pickle.load(fp)
# read_dict = pickle.load(open("a.pkl", "rb"))
print(read_dict)
print(type(read_dict))
# {'name': 'bruce', 'age': '18'}
# <class 'dict'>

【五】通用性

  • pickle 模块适用于大多数 Python 对象,包括自定义类的实例、内置数据类型等。

  • 不适用于某些特殊对象,比如文件句柄、数据库连接等。

  • josn序列化以后javajs等语言可以识别

  • pickle序列化以后,其他语言都不能识别

【六】应用

【1】函数写入文件、从文件读取函数

import pickledef my_func():print("这是定制函数")pickle.dump(my_func, open("a.pkl", "wb"))
read_func = pickle.load(open("a.pkl", "rb"))
read_func() # 这是定制函数

【2】将实例写入文件、从文件读取实例

import pickleclass PeaShooter:def __init__(self, name, attack_val):self.name = nameself.attack_val = attack_valpickle.dump(PeaShooter, open("a.pkl", "wb"))
read_object = pickle.load(open("a.pkl", "rb"))
ice_shooter = read_object("寒冰射手", 20)pickle.dump(ice_shooter, open("a.pkl", "wb"))
read_instance = pickle.load(open("a.pkl", "rb"))
print(read_instance.__dict__)
# {'name': '寒冰射手', 'attack_val': 20}

相关文章:

  • 什么是云服务器ECS及其优势、购买、使用方式和部署建议
  • 操作系统-操作系统的概念和功能
  • Harbor离线安装
  • 建筑垃圾处理行业分析:正在被越来越广泛的运用
  • NSSCTF Round# 16 Basic pwn方向题解
  • 【Spring Boot 3】【数据源】自定义多数据源
  • GPT实战系列-ChatGLM3管理工具的API接口
  • 浏览器深色模式
  • C++ OpenGL 3D Game Tutorial 2: Making OpenGL 3D Engine学习笔记
  • python期末考试:python的基本使用
  • GPT-4技术报告的解读(二)
  • 【Python】数据可视化--基于TMDB_5000_Movie数据集
  • 大一统的监控探针采集器 cprobe
  • Linux 脚本编程题库
  • 【2024】OAK智能深度相机校准教程
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • echarts花样作死的坑
  • ES10 特性的完整指南
  • HashMap ConcurrentHashMap
  • laravel 用artisan创建自己的模板
  • Spark RDD学习: aggregate函数
  • 检测对象或数组
  • 简单数学运算程序(不定期更新)
  • 前端代码风格自动化系列(二)之Commitlint
  • 新版博客前端前瞻
  • 如何用纯 CSS 创作一个货车 loader
  • ​HTTP与HTTPS:网络通信的安全卫士
  • (¥1011)-(一千零一拾一元整)输出
  • (C#)一个最简单的链表类
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (接口封装)
  • (三)Honghu Cloud云架构一定时调度平台
  • (转)Android学习笔记 --- android任务栈和启动模式
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET值类型变量“活”在哪?
  • .NET中winform传递参数至Url并获得返回值或文件
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • ?.的用法
  • @angular/cli项目构建--Dynamic.Form
  • @Autowired注解的实现原理
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [<死锁专题>]
  • [20170713] 无法访问SQL Server
  • [BUUCTF 2018]Online Tool
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)