老生常谈Python中的Pickle库

作者:A-L-Kun 时间:2023-07-19 19:31:03 

简介

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)

来源:https://www.cnblogs.com/liuzhongkun/p/15831477.html

标签:Python,Pickle,库
0
投稿

猜你喜欢

  • Python Numpy教程之排序,搜索和计数详解

    2021-10-31 05:30:21
  • python机器学习理论与实战(一)K近邻法

    2021-08-27 18:05:49
  • vue组件定义,全局、局部组件,配合模板及动态组件功能示例

    2024-05-05 09:09:59
  • sqlserver、mysql获取连接字符串步骤

    2024-01-22 00:49:33
  • Pytorch搭建SRGAN平台提升图片超分辨率

    2022-10-03 14:02:01
  • php中get_meta_tags()、CURL与user-agent用法分析

    2024-05-02 17:32:52
  • 深入分析MSSQL数据库中事务隔离级别和锁机制

    2024-01-22 02:53:35
  • python实现修改固定模式的字符串内容操作示例

    2023-05-13 21:44:04
  • 使用python向MongoDB插入时间字段的操作

    2021-05-21 06:54:19
  • Golang 中的 条件变量(sync.Cond)详解

    2024-04-25 15:28:32
  • 详解java调用ffmpeg转换视频格式为flv

    2024-01-19 03:13:11
  • python类参数定义及数据扩展方式unsqueeze/expand

    2023-08-07 21:56:42
  • Python爬取OPGG上英雄联盟英雄胜率及选取率信息的操作

    2023-12-01 07:06:05
  • Python实现将Excel转换成xml的方法示例

    2023-01-19 23:02:53
  • MySQL8新特性:持久化全局变量的修改方法

    2024-01-19 05:38:30
  • 深入解析Python的Tornado框架中内置的模板引擎

    2022-08-03 12:43:52
  • Python 读取串口数据,动态绘图的示例

    2021-11-15 19:36:24
  • MySQL中超级有用的14个小知识总结

    2024-01-26 09:01:10
  • Python数值求解微分方程方法(欧拉法,隐式欧拉)

    2023-06-29 10:45:29
  • 详述numpy中的np.random.random()系列函数用法

    2023-08-08 00:25:09
  • asp之家 网络编程 m.aspxhome.com