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

【python】 用来将对象持久化的 pickle 模块

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

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

一、pickle 模块下的方法

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

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

1. dumps()

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

示例

import pickletest_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 pickletest_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 pickletest_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 pickletest_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 对象 p3p3 = 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 模块

pickle 模块可以对一个 Python 对象的二进制进行序列化和反序列化。说白了&#xff0c;就是它能够实现任意对象与二进制直接的相互转化&#xff0c;也可以实现对象与文本之间的相互转化。 比如&#xff0c;我程序里有一个 python 对象&#xff0c;我想把它存到磁盘里&#xff…...

【博客654】prometheus配置抓取保护以防止压力过载

prometheus抓取保护配置以防止压力过载 场景 担心您的应用程序指标可能突然激增&#xff0c;以及指标突然激增导致prometheus压力过载 就像生活中的许多事情一样&#xff0c;标签要有节制。当带有用户 ID 或电子邮件地址的标签被添加到指标时&#xff0c;虽然它不太可能结束…...

Backtrader官方中文文档:第十三章Observers观察者

本文档参考backtrader官方文档,是官方文档的完整中文翻译,可作为backtrader中文教程、backtrader中文参考手册、backtrader中文开发手册、backtrader入门资料使用。 本章包含 backtrader 官方Observers章节全部内容,入口 : https://backtrader.com/docu/observers-and-sta…...

算法leetcode|54. 螺旋矩阵(rust重拳出击)

文章目录 54. 螺旋矩阵&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a;每次循环移动一步&#xff1a;每次循环完成一个顺时针&#xff1a…...

单容水箱建模(自衡单容水箱+无自衡单容水箱)

自衡单容水箱Simulink建模和PLC源代码请参看下面文章链接: 单容双容水箱建模(simulink仿真+PLC代码)_RXXW_Dor的博客-CSDN博客PLC通过伯努利方程近似计算水箱流量详细内容请参看下面的文章博客PLC通过伯努利方程近似计算水箱流量(FC)_怎么用伯努利方程求某水位流量_RXXW_Dor的…...

分享Python7个爬虫小案例(附源码)

本次的7个python爬虫小案例涉及到了re正则、xpath、beautiful soup、selenium等知识点&#xff0c;非常适合刚入门python爬虫的小伙伴参考学习。注&#xff1a;若涉及到版权或隐私问题&#xff0c;请及时联系我删除即可。 1.使用正则表达式和文件操作爬取并保存“某吧”某帖子…...

我用ChatGPT写2023高考语文作文(一):全国甲卷

2023年 全国甲卷 适用地区&#xff1a;广西、贵州、四川、西藏 人们因技术发展得以更好地掌控时间&#xff0c;但也有人因此成了时间的仆人。 这句话引发了你怎样的联想与思考&#xff1f;请写一篇文章。 要求&#xff1a;选准角度&#xff0c;确定立意&#xff0c;明确文体&am…...

c++ modbusTCP

//Modbus TCP是一种基于TCP/IP协议的Modbus协议&#xff0c;它允许Modbus协议通过以太网进行通信。 //在C中&#xff0c;可以使用第三方库来实现Modbus TCP通信&#xff0c;例如libmodbus和QModbus。 //使用libmodbus库实现Modbus TCP通信的示例代码如下&#xff1a; //c #incl…...

linux(信号结尾)

目录&#xff1a; 1.可重入函数 2.volatile关键字 3.SIGCHLD信号 -------------------------------------------------------------------------------------------------------------------------------- 1.可重入函数----------用来描述一个函数的特点的 1.在单进程当中也存…...

【漏洞修复】node-exporter被检测出来pprof调试信息泄露漏洞

node-exporter被检测出来pprof调试信息泄露漏洞 说在前面解决方法结语 说在前面 惯例开篇吐槽&#xff0c;有些二五仔习惯搞点自研的安全扫描工具&#xff0c;然后加点DIY元素&#xff0c;他也不管扫的准不准&#xff0c;就要给你报个高中危的漏洞&#xff0c;然后就要去修复&…...

在linux 上安装 NFS服务器软件

在 Ubuntu Linux 中创建 NFS 文件系统通常需要完成以下步骤: 安装 NFS 服务器软件。您可以在终端上使用以下命令来安装所需的软件包。sudo apt-get update sudo apt-get install nfs-kernel-server创建要共享的目录。例如,您可以创建一个名为 /var/nfs/shared 的目录。sudo m…...

网卡中的Ring buffer -- 解决 rx_resource_errors 丢包

1、软硬件环境 硬件&#xff1a; 飞腾E2000Q 平台 软件&#xff1a; linux 4.19.246 2、问题现象 网卡在高速收包的过程中&#xff0c;出现 rx error , 细查是 rx_resource_errors 如下&#xff1a; rootE2000-Ubuntu:~# ifconfig eth1 eth1: flags4163<UP,BROADCAST,RU…...

六月九号补题日记:Codeforces Round 877 (Div. 2)

专注是不够的&#xff0c;很重要的一方面在于细节&#xff0c;关注细节&#xff1a;精细和专注才是成功的重点&#xff01;&#xff01;&#xff01; A 题意&#xff1a;给你一堆数字&#xff0c;说这一堆数字是由最初的两个数字相减得到的&#xff0c;让你求出两个数字其中一…...

python基础选择题,高中适用

1. 下面哪个是 Python 的注释符号&#xff1f; A. // B. # C. /* D. ; 答案&#xff1a;B 2. 下面哪个是 Python 的赋值运算符&#xff1f; A. B. C. ! D. > 答案&#xff1a;A 3. 下面哪个是 Python 的逻辑运算符&#xff1f; A. && B. || C. ! D. & 答…...

Linux 面试题-(腾讯,百度,美团,滴滴)

Linux 面试题-(腾讯,百度,美团,滴滴) 分析日志t.log(访问量)&#xff0c;将各个ip 地址截取&#xff0c;并统计出现次数,并按从大到小排序(腾讯) http://192.168.200.10/index1.html http://192.168.200.10/index2.html http://192.168.200.20/index1.html http://192.168.20…...

DDD--战略设计步骤

在领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;中&#xff0c;战略设计是指在系统的整体层面上考虑领域模型的组织和架构。下面是一些战略设计的详细步骤&#xff1a; 确定限界上下文&#xff08;Bounded Context&#xff09;&#xff1a;首先&a…...

Web Scoket简述

Web Socket 简介 初次接触 Web Socket 的人&#xff0c;我们已经有了 HTTP 协议&#xff0c;为什么还需要另一个协议&#xff1f;它能带来什么好处&#xff1f; 因为 HTTP 协议有一个缺陷&#xff1a;通信只能由客户端发起。http基于请求响应实现。 &#xff08;准确来说HTTP…...

“Docker 技术在企业中的应用及挑战解决方案“

Docker 技术是一种基于容器化的应用部署和管理技术。随着云计算的普及和应用的不断增多&#xff0c;Docker 技术在企业中的应用越来越广泛。本文将介绍 Docker 技术的基本概念、优势和应用场景&#xff0c;并讨论如何在企业中应用 Docker 技术。 一、Docker 技术概述 Docker …...

vue中开发包、生产包、全局包的区别以及安装语法

目录 开发包 (devDependencies) 安装方法 生产包 (dependencies) 安装方法 全局包 (Global build) 安装方法 vue中有三种不同类型的包&#xff1a;开发包 (Development build)&#xff0c;生产包 (Production build) 和全局包 (Global build)。下面我们分别解释它们的区别…...

list的模拟实现

前言 list是STL中重要的容器&#xff0c;了解它的原理对于我们掌握它是有很多的帮助的&#xff0c;一般list和vector都是一起来使用的&#xff0c;因为它们的优缺点不同&#xff0c;刚好可以互补。list的优点是任意位置的插入和删除都很快&#xff0c;它的缺点是不支持随机访问…...

ChatGLM简介和SSE聊天接口测试效果

开发公司 智谱AI是由清华大学计算机系技术成果转化而来的公司&#xff0c;致力于打造新一代认知智能通用模型。公司合作研发了双语千亿级超大规模预训练模型GLM-130B&#xff0c;并构建了高精度通用知识图谱&#xff0c;形成数据与知识双轮驱动的认知引擎&#xff0c;基于此模型…...

darknet yolo标注、训练详细说明

文章目录 1、标注数据1.1、标注1.2、生成训练列表文件train.txt1.3、转换数据标注格式 2、训练数据整理2.1、修改train.txt路径2.2、修改yolov3.cfg2.3、obj.name和obj.data2.4、训练脚本文件trian.sh2.5、测试脚本文件test.sh 3、训练 本文对应的脚本文件和程序下载链接 darke…...

chatgpt赋能python:Python如何产生随机整数?

Python如何产生随机整数&#xff1f; Python是一种高级编程语言。它允许程序员轻松地创建各种类型的应用程序&#xff0c;包括生成随机整数。本文将介绍如何在Python中使用内置的随机数函数来生成随机整数。 random模块 Python中的random模块提供了生成随机数的函数。这些函…...

大话Stable-Diffusion-Webui-客制化主题(四)

文章目录 目标效果开始重要说明单选框以及复选框图标样式更改gradio主题构建器上传主题方式代码上传主题方式目标 在DIY的主题中更改gradio单选框组件以及复选框组件的勾选后图标样式 效果 开始 笔者在使用gradio的主题构建器的过程中发现,gradio的复选框以及单选框组件勾选…...

Excel函数VLOOKUP常用方法

一、基础用法 1、精确匹配 公式&#xff1a;VLOOKUP(待匹配值&#xff0c;查找范围&#xff0c;范围列数&#xff0c;查找方式) 定义好要输出表的表头和第一列&#xff0c;第一列即为要查找和匹配的父内容&#xff0c;在第二列输入公式&#xff0c;被查找表中一定也要将待查…...

systemV的工作原理+原理代码

概念 我们知道进程间的通信有管道的方式进程通信管道制作_云的小站的博客-CSDN博客 但是我们的管道通信其实属于一种取巧的方式&#xff0c;利用了打开的文件可读写的特性上&#xff0c;两个进程对此分别进行读写操作就会产生所谓的通信现象&#xff0c;但是外面的管道依旧得…...

Kubeflow--TFJob实现机制学习

2023暑期学习 TF Job实际场景应用Vertex AI TF Job 链接 https://www.kubeflow.org/docs/components/training/tftraining/ https://developer.aliyun.com/article/601779 TFJob实际上遵循Kubernetes标准的API定义. TFJob 对象 apiVersion --> string --> api版本&…...

百度出品,Nature重磅 -- 优化的mRNA设计算法可改善mRNA的稳定性和免疫原性

摘要 尽管mRNA疫苗已用于COVID-19的预防&#xff0c;但仍然面临不稳定和易降解的风险&#xff0c;这是mRNA疫苗存储、配送、效价等面临的重要障碍。先前的研究已表明&#xff0c;增加二级结构可延长mRNA的半衰期&#xff0c;再加上选择优化的密码子&#xff0c;可改善蛋白表达。…...

CKA 01_docker部署Kubernetes 部署docker 使用kubeadm引导集群 安装Pod网络

文章目录 1. 虚拟机步骤2. Docker 部署 Kubernetes2.1 部署 docker2.1.1 环境要求2.1.2 安装 docker 引擎2.1.3 worker 节点对 master 节点免密2.1.4 设定 docker 开机自启2.1.5 打开桥接&#xff0c;查看桥接流量2.1.6 设定 systemd 方式管理 cgroup2.1.7 docker部署完成2.1.8…...

Redis的使用规范小建议

Redis 核心技术与实战 笔记 作者&#xff1a; 蒋德钧 毕竟&#xff0c;高性能和节省内存&#xff0c;是我们的两个目标&#xff0c;只有规范地使用Redis&#xff0c;才能真正实现这两个目标。如果说之前的内容教会了你怎么用&#xff0c;那么今天的内容&#xff0c;就是帮助你用…...

泉州网站建设泉州/山东关键词优化联系电话

本周主要复习了高数&#xff0c;感觉掌握了忘的比较快&#xff0c;所以在前几天主要是看了知识点&#xff0c;以及书上的例题&#xff0c;后几天就找了一些题做&#xff0c;物理在下周五考&#xff0c;中间的时间间隔较长&#xff0c;所以准备考完高数再复习。 而且上周的模拟考…...

哪个网站可以做英文兼职/百度爱采购官方网站

1. 文件处理命令&#xff1a;touch 命令名称&#xff1a;touch命令所在路径&#xff1a;/bin/touch执行权限&#xff1a;所有用户语法&#xff1a;touch [文件名]功能描述&#xff1a;创建空文件范例&#xff1a; 文件名不包含空格 touch Japanlovestory.list 文件名包含空格 t…...

网址大全123设为主页/网站的排名优化怎么做

笔者是一个痴迷于挖掘数据中的价值的学习人&#xff0c;希望在平日的工作学习中&#xff0c;挖掘数据的价值&#xff0c;找寻数据的秘密&#xff0c;笔者认为&#xff0c;数据的价值不仅仅只体现在企业中&#xff0c;个人也可以体会到数据的魅力&#xff0c;用技术力量探索行为…...

网站制作报价大约/阳泉seo

[转载博客](http://blog.csdn.net/pyfysf/article/details/72598518) 已经安装好了AndroidStudio&#xff0c;安装教程 本教程是作者自己摸索出来的&#xff0c;有不足之处还请大家海涵。多多拍砖&#xff0c;互相学习。 第一步&#xff1a;下载git&#xff0c;安装git客户端 …...

统计wordpress/成都谷歌seo

分析 它居然真的是个nlog^3暴力&#xff1f;&#xff01; 两个数在加小于min(lowbit(x),lowbit(y))的数时对他们的奇偶性不影响 因此每次加上min(lowbit(x),lowbit(y))判断此时的奇偶性 直接排序即可 代码 #include<bits/stdc.h> using namespace std; #define int long …...

wordpress做社交网站/百度网盘下载

登录linux时出现黑屏的找到这篇解决SUSE的黑屏问题1、在启动时&#xff0c;GRUB上引导命令后面加上一个VGA791&#xff0c;这样进去屏幕分辩率就是1024*768。kernel (hd0,0)/linux root/dev/ram ramdisk_size65536 devfsmount,all vga791initrd (hd0,0)/initrdboot2、在黑屏时。…...