返回顶部
首页 > 资讯 > 后端开发 > Python >老生常谈Python中的Pickle库
  • 463
分享到

老生常谈Python中的Pickle库

2024-04-02 19:04:59 463人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录简介pickle与JSON比较函数dumpsloadsdumpload简介 python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任

简介

python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。也就是说,pickle 可以实现 Python 对象的存储及恢复。

pickle与json比较

        pickle协议和JSON  (javascript对象表示法)之间有基本的区别:
        JSON是一种文本序列化格式(它输出unicode文本,尽管大多数时候它被编码为utf-8),而pickle是二进制序列化格式;
        JSON是人类可读的,而pickle则不是;
        JSON在Python生态系统之外是可互操作和广泛使用的,而pickle是特定于Python的;
        默认情况下,JSON只能表示Python内置类型的一个子集,并且没有自定义类;pickle可以表示极其大量的Python类型(其中许多是自动的,通过聪明地使用Python的内省设施,复杂的情况可以通过实现特定的对象api来解决)。

pickle模块的应用很简单,只有四个方法

  • dumps():将 Python 中的对象序列化成二进制对象,并返回
  • loads():读取给定的二进制对象数据,并将其转换为 Python 对象
  • dump():将 Python 中的对象序列化成二进制对象,并写入文件
  • load():读取指定的序列化数据文件,并返回对象

其中 dumps 和 loads 实现基于内存的 Python 对象与二进制互转;dump 和 load 实现基于文件的 Python 对象与二进制互转

函数

dumps

dumps(obj, protocol=None)
  • obj:要转换的 Python 对象
  • protocol:pickle 的转码协议,取值为 0、1、2、3、4,其中 0、1、2 对应 Python 早期的版本,3 和 4 则对应 Python 3.x 版本及之后的版本。未指定情况下,默认为 3
import pickle
 
dic = {"name": "lihua", "age": 30}
pe = pickle.dumps(dic)  # 将任意数据类型类型转换成二进制文件
print(pe)

loads

loads(data)

data 参数表示要转换的二进制对象

import pickle
 
dic = {"name": "lihua", "age": 30}
pe = pickle.dumps(dic)  # 将任意数据类型转换成二进制文件
dic1 = pickle.loads(pe)  # 将二进制文件恢复成原来的数据类型
print(dic1)

dump

dump (obj, file,protocol=None)
  • obj:要转换的 Python 对象
  • file:转换到指定的二进制文件中,要求该文件必须是以"wb"的打开方式进行操作
  • protocol:pickle 的转码协议,取值为 0、1、2、3、4,其中 0、1、2 对应 Python 早期的版本,3 和 4 则对应 Python 3.x 版本及之后的版本。未指定情况下,默认为 3
import pickle
 
dic = {"name": "lihua", "age": 30}
with open("pickle.pickle", "wb") as f:
    pickle.dump(dic, f)  # 将转换后的二进制文件存储在pickle.pickle文件里面

load

此函数和 dump() 函数相对应,用于将二进制对象文件转换成 Python 对象

load(file)

file 参数表示要转换的二进制对象文件(必须以 "rb" 的打开方式操作文件)

import pickle
 
dic = {"name": "lihua", "age": 30}
with open("pickle.pickle", "rb") as f:
    dic1 = pickle.load(f)  # 将存储的文件内容导出为python对象
 
print(dic1)

到此这篇关于Python中的Pickle库的文章就介绍到这了,更多相关Python Pickle库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 老生常谈Python中的Pickle库

本文链接: https://lsjlt.com/news/163417.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 老生常谈Python中的Pickle库
    目录简介pickle与json比较函数dumpsloadsdumpload简介 Python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任...
    99+
    2024-04-02
  • 老生常谈C++ 中的继承
    目录继承1.1 继承的概念1.2 继承的定义1.2.1 定义格式2 基类(父类)对象和派生类(子类)对象之间的赋值转换 3 继承中的作用域4 派生类(子类)的默认成员函数5...
    99+
    2024-04-02
  • 老生常谈python字典用法
    目录创建字典遍历访问修改删除setdefault() 方法创建字典 python 创建字典可以使用 dict 函数,或者使用花括号,用花括号的方式更为常见。 d = { ...
    99+
    2024-04-02
  • 老生常谈.NET中的 COM 组件
    目录什么是COM组件?使用COM组件需要注意:一:背景1.讲故事二:COM 多语言互操作1. 背景2. C# 写一个 COM 组件3. 注册 COM 到注册表4. 使用 C++ 调用...
    99+
    2022-11-13
    .NET  COM 组件 .NET组件
  • 老生常谈java中的Future模式
    jdk1.7.0_79 本文实际上是对上文《简单谈谈ThreadPoolExecutor线程池之submit方法》的一个延续或者一个补充。在上文中提到的submit方法里出现了FutureTask,这不得不停止脚步将方向转向Java的Fut...
    99+
    2023-05-31
    java future模式 ava
  • 老生常谈java数组中的常见异常
    数组的定义 1:单个变量能存储信息 2:用来存储具有相同数据类型的数据集合,可以使用共同的名字来引用数组中存储的数据。 特点 数组可以存储任何类型的数据,包括原始数据类型和引用数据类...
    99+
    2024-04-02
  • 老生常谈vue的生命周期
    目录一、什么是生命周期二、生命周期函数三、生命周期的流程四、简单的生命周期代码总结一、什么是生命周期 每一个组件都可能经历从创建,挂载,更新,卸载的过程。 在这个过程中的某一个阶段,...
    99+
    2024-04-02
  • 老生常谈c++中的静态成员
    引言 有时候需要类的一些成员与类本身相关联,而不是与类的每个对象相关联。比如类的所有对象都要共享的变量,这个时候我们就要用到类的静态成员。 声明类的静态成员 声明静态成员的方法是使用...
    99+
    2024-04-02
  • 老生常谈Vue中的侦听器watch
    目录一、侦听器watch1.1.初识侦听器watch1.2.Vue的data的watch1.3.Vue的watch侦听选项一、侦听器watch (思维导图不太完善,因为是按照自己看...
    99+
    2022-11-13
    Vue侦听器watch Vue侦听器 Vue watch
  • 老生常谈java中的fail-fast机制
    在JDK的Collection中我们时常会看到类似于这样的话:例如,ArrayList:注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 Concurren...
    99+
    2023-05-31
    java fail fast
  • 老生常谈Python进阶之装饰器
    函数也是对象 要理解Python装饰器,首先要明白在Python中,函数也是一种对象,因此可以把定义函数时的函数名看作是函数对象的一个引用。既然是引用,因此可以将函数赋值给一个变量,也可以把函数作为一个参数...
    99+
    2022-06-04
    进阶 老生常谈 Python
  • 老生常谈Java中List与ArrayList的区别
    目录1 概念方面2 初始化方面2.1 List2.1.1 错误写法2.1.2 正确写法2.1.2.1 不指定存取数据类型2.1.2.2 指定存取数据类型2.2 ArrayList2....
    99+
    2024-04-02
  • 老生常谈java中的数组初始化
    数组的初始化可以分为两种:静态初始化动态初始化静态初始化:例:String[] str = new String[]{"A","B","C"};String str[] = new String[]{"A","B","C"};String ...
    99+
    2023-05-31
    java 数组 初始化
  • Android老生常谈LayoutInflater的新认知
    现在看我文章的多数是一些老Android了,相信每个人使用起LayoutInflater都是家常便饭,信手拈来。 但即使是这样,我仍然觉得这个知识点有可以分析的地方,看完之后或许你对...
    99+
    2024-04-02
  • 老生常谈Scanner的基本用法
    需求:键盘录入一个月份,输出该月份对应的季节。一年有四季3,4,5   春季6,7,8   夏季9,10,11 秋季12,1,2  冬季分析:A:键盘录入一个月份,用Scanner实现B:判...
    99+
    2023-05-31
    scanner 基本用法
  • 老生常谈C++explicit关键字
    目录显式和隐式的区别总结explicit 关键字用于显式声明一个类构造函数是显式而非隐式的,从而禁用类构造函数的隐式自动类型转换。类构造函数默认情况下即声明为implici...
    99+
    2023-03-24
    C++ explicit关键字 C++ explicit
  • 老生常谈C语言中指针的使用
    目录前提一.指针基础1.1 变量指针1.2 数据指针1.3 指针的本质1.4 指针数组1.5 指针的移动1.5 Scanf函数的解释二.指针的进阶玩法2.1 二维指针2.2 结构体指...
    99+
    2024-04-02
  • 老生常谈Javascript的防抖和节流
    目录1. 什么是防抖2、什么是节流3、节流阀总结1. 什么是防抖 【解释】: 防抖策略(debounce)是当事件被触发后,延迟 n 秒后再执行回调,如果在这 n 秒内事件...
    99+
    2024-04-02
  • 老生常谈Android HapticFeedback(震动反馈)
    Android中长按一个控件的时候,想以震动提示用户,除了用Vibrate类来做,还可以用到(HapticFeedback)震动反馈实现。 本篇文章,我们就一起来熟悉一下And...
    99+
    2022-06-06
    Android
  • 老生常谈spring的事务传播机制
    目录spring的事务传播机制1、why为什么会有事务传播机制?2、传播机制生效的条件解决方案3、传播机制类型PROPAGATION_REQUIRED (默认)REQUIRES_NE...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作