返回顶部
首页 > 资讯 > 后端开发 > Python >用来将对象持久化的pythonpickle模块
  • 275
分享到

用来将对象持久化的pythonpickle模块

2024-04-02 19:04:59 275人浏览 安东尼

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

摘要

目录前言一、pickle 模块下的方法1. dumps()2. loads()3. dump()4. load()二、可以被 pickle 封存/解封的对象三、pickle 与 JS

前言

pickle 模块可以对一个 python 对象的二进制进行序列化和反序列化。说白了,就是它能够实现任意对象与二进制直接的相互转化,也可以实现对象与文本之间的相互转化。

比如,我程序里有一个 Python 对象,我想把它存到磁盘里,于是我用 pickle 把他转到一个文本里。当后面我想使用的时候,读取出来时候依然是一个 python 对象。

一、pickle 模块下的方法

pickle 模块提供了以下 4 种方法:

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

1. dumps()

将 Python 中的对象序列化成二进制对象,并直接返回。

示例

import pickle
test_list = ["pingguo", {1, 2, 3}, None]
# 使用 dumps() 函数将 test_list 转成 p1
p1 = pickle.dumps(test_list)
print(p1)
print("返回类型:", type(p1))

输出结果:

b'\x80\x03]q\x00(X\x07\x00\x00\x00pingguoq\x01cbuiltins\nset\nq\x02]q\x03(K\x01K\x02K\x03e\x85q\x04Rq\x05Ne.'
返回类型: <class 'bytes'>

2. loads()

读取给定的二进制对象数据,并将其转换为 Python 对象。

示例在上面的基础上继续:

import pickle
test_list = ["pingguo", {1, 2, 3}, None]
# 使用 dumps() 函数将 test_list 转成 p1
p1 = pickle.dumps(test_list)
print(p1)
print("返回类型:", type(p1))
# 使用 loads() 函数将 p1 转成 Python 对象 p2
p2 = pickle.loads(p1)
print(p2)
print("返回类型:", type(p2))

输出结果:

b'\x80\x03]q\x00(X\x07\x00\x00\x00pingguoq\x01cbuiltins\nset\nq\x02]q\x03(K\x01K\x02K\x03e\x85q\x04Rq\x05Ne.'
返回类型: <class 'bytes'>
['pingguo', {1, 2, 3}, None]
返回类型: <class 'list'>

pickle 反序列化后的对象与原对象是等值的副本对象,类似deepcopy。

3. dump()

将 Python 中的对象序列化成二进制对象,并写入文件。

示例

import pickle
test_list = ["pingguo", {1, 2, 3}, None]
with open("test_pickle.txt", "wb") as f:
    # 使用 dump() 函数将 test_list 转成 p1,写到txt文本里
    pickle.dump(test_list, f)

注意这里的写文件是 "wb",以二进制格式打开一个文件只用于写入,否则会报错。

执行成功后,同级目录下生成一个test_pickle.txt文件,因为是二进制内容,直接打开看到的是乱码。

4. load()

读取指定的序列化数据文件,并返回对象。

示例

import pickle
test_list = ["pingguo", {1, 2, 3}, None]
with open("test_pickle.txt", "wb") as f:
    # 使用 dump() 函数将 test_list 转成 p1,写到txt文本里
    pickle.dump(test_list, f)
with open("test_pickle.txt", "rb") as f:
    # 将二进制文件对象转换成 Python 对象 p3
    p3 = pickle.load(f)
    print(p3)
    print("类型:", type(p3))

注意,这里读取文件用rb,也就是以二进制格式打开一个文件用于只读。

执行成功。

['pingguo', {1, 2, 3}, None]
类型: <class 'list'>

二、可以被 pickle 封存/解封的对象

下列类型可以被封存:

  • None、True 和 False
  • 整数、浮点数、复数
  • str、byte、bytearray
  • 只包含可封存对象的集合,包括 tuple、list、set 和 dict
  • 定义在模块最外层的函数(使用 def 定义,lambda 函数则不可以)
  • 定义在模块最外层的内置函数
  • 定义在模块最外层的类
  • 某些类实例,这些类的 dict 属性值或 getstate() 函数的返回值可以被封存。

三、pickle 与 json 的区别

python 提供的 json 标准库相信大家都熟悉,提供的方法也与 pickle 相似,那么两者有什么区别呢?

  • JSON 是一个文本序列化格式,pickle 是一个二进制序列化格式。
  • JSON 是我们可以直观阅读的,而 pickle 不行。
  • JSON是可互操作的,在Python之外也可以使用,而pickle则是Python专用的。
  • 默认情况下,JSON 只能表示 Python 内置类型的子集,不能表示自定义的类;但 pickle 可以表示大量的 Python 数据类型。
  • JSON不像 pickle,对一个不信任的JSON进行反序列化的操作本身不会造成任意代码执行漏洞。

关于最后一点,说的是 pickle 模块并不安全。很有可能你去解封的是恶意构建的 pickle 数据,造成解封时执行了恶意代码,所以要慎用。

以上就是用来将对象持久化的python pickle模块的详细内容,更多关于python对象持久化pickle模块的资料请关注编程网其它相关文章!

--结束END--

本文标题: 用来将对象持久化的pythonpickle模块

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

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

猜你喜欢
  • 用来将对象持久化的pythonpickle模块
    目录前言一、pickle 模块下的方法1. dumps()2. loads()3. dump()4. load()二、可以被 pickle 封存/解封的对象三、pickle 与 js...
    99+
    2024-04-02
  • Python pickle模块实现Python对象持久化存储
    目录前言:pickle.dumps()函数pickle.loads()函数pickle.dump()函数pickle.load()函数总结:前言: Python 中有个序列化过程叫作...
    99+
    2024-04-02
  • Python中的数据对象持久化存储模块pickle的使用示例
    Python中可以使用 pickle 模块将对象转化为文件保存在磁盘上,在需要的时候再读取并还原。具体用法如下: pickle是Python库中常用的序列化工具,可以将内存对象以文本或二进制格式导出为字符串...
    99+
    2022-06-04
    示例 持久 模块
  • shelve 用来持久化任意的Python对象实例代码
    shelve -- 用来持久化任意的Python对象 这几天接触了Python中的shelve这个module,感觉比pickle用起来更简单一些,它也是一个用来持久化Python对象的简单工具。当我们写程...
    99+
    2022-06-04
    持久 实例 对象
  • Node.js Exports 对象:模块化设计的未来
    exports 对象的运作原理 exports 对象是一个全局对象,在每个模块中都可用。当模块导出一个值时,它会被附加到 exports 对象上。导入模块时,将获取 exports 对象并访问其属性以获取导出的值。 在以下示例中,modu...
    99+
    2024-04-02
  • Hibernate持久化对象的状态有哪些
    本篇文章给大家分享的是有关Hibernate持久化对象的状态有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Hibernate中的对象有3中状态,瞬时对象(Transien...
    99+
    2023-05-31
    hibernate 持久化classloader 对象
  • Python之对象的永久保存模块---p
    经常遇到在Python程序运行中得到了一些字符串、列表、字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。 这个时候Pickle模块就派上用场了,它可以将对象转换为一种可以传输或存储的格式。  p...
    99+
    2023-01-30
    模块 对象 Python
  • Node.js Exports 对象:模块化编程的基石
    Exports 对象的创建 当使用 module.exports 语法分配值时,会自动创建 exports 对象。此对象作为其父模块的属性提供。 使用 Exports 对象 开发人员可以通过两种方式使用 exports 对象: 直接访问...
    99+
    2024-04-02
  • Node.js Exports 对象:模块化设计的魔力
    在 Node.js 中,exports 对象是实现模块化设计的基石。它允许您定义和公开模块的内部状态和功能,从而实现代码重用性和可维护性。 模块化设计的优势 代码重用性:模块可以被多个应用程序和脚本重用,避免重复编写相同的功能。 可维护...
    99+
    2024-04-02
  • Node.js的模块化机制和Buffer对象详解
    目录一、Node.js的模块化机制1、什么是CommonJS模块规范2、CommonJS模块规范化的内容3、每个导出的模块都有一个moudle对象,该对象包含的属性有:4、使用req...
    99+
    2024-04-02
  • Node.js中ES6模块化及Promise对象怎么使用
    本文小编为大家详细介绍“Node.js中ES6模块化及Promise对象怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js中ES6模块化及Promise对象怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-02
  • Node.js的模块化机制和Buffer对象是什么
    本篇内容主要讲解“Node.js的模块化机制和Buffer对象是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js的模块化机制和Buffer对象是什么”吧!一、Node.js的模块...
    99+
    2023-06-29
  • Node.js Exports 对象:模块化设计的终极指南
    在 Node.js 中,exports 对象是模块系统的一个核心组成部分。它允许我们从一个模块导出值,以便其他模块可以导入和使用这些值。这对于创建可重用的代码和促进模块化设计至关重要。 exports 对象 exports 对象是一个 J...
    99+
    2024-04-02
  • Node.js Exports 对象:通往模块化编程的捷径
    exports 对象: exports 对象是 Node.js 内置的一个特殊对象,用于导出模块的属性和方法。它提供了一种机制,可以在其他模块中访问这些元素,从而实现代码的模块化和重用。 导出方法: 有两种主要方法可以向 exports ...
    99+
    2024-04-02
  • 解密 Node.js Exports 对象:模块化设计的艺术
    例如,以下模块导出一个名为 add 的函数: // module.js exports.add = function(a, b) { return a + b; }; 其他模块可以通过 require() 函数从 module.js ...
    99+
    2024-04-02
  • Node.js Exports 对象:模块化设计背后的秘密
    模块化设计的好处 可重用性:模块可以轻松地在不同项目中重用,避免重复代码。 可维护性:将代码组织成模块使维护和更新变得更加容易。 协作性:模块可以独立开发和维护,促进团队协作。 可测试性:模块可以单独测试,提高了整体代码质量。 Exp...
    99+
    2024-04-02
  • Node.js Exports 对象:解锁模块化编程的潜力
    exports 对象的用法 Exports 对象是一个 JavaScript 对象,它存储着模块要导出的值。要将值导出,只需将它们分配给 Exports 对象。例如: // 模块文件 exports.myFunction = functi...
    99+
    2024-04-02
  • Node.js Exports 对象:揭开模块化编程的奥秘
    导出基本类型 最简单的导出类型是基本类型,如字符串、数字和布尔值。要导出这些类型,只需将它们分配给 exports 对象即可: exports.message = "Hello, world!"; exports.num = 42; ex...
    99+
    2024-04-02
  • 揭秘node.js exports对象:模块化开发的基石
    Node.js 的模块系统旨在将大型代码项目分解为更小、可重用的模块。这些模块相互隔离,从而提高了应用程序的灵活性、可维护性和可测试性。 exports 对象 在 Node.js 中,每个模块都包含一个 exports 对象,它充当模块公...
    99+
    2024-04-02
  • 掌握node.js exports对象,打造高效模块化应用
    exports 的用法 exports 对象是一个简单的 JavaScript 对象,可以用来将其属性导出为模块的一部分。要将变量或函数导出到模块中,只需将它们分配给 exports 对象即可: // 模块文件 my-module.js ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作