pickle和cPickle——python对象序列化

安卓逆向实战:用Batch Apktool 3.8.0快速汉化APK的完整流程 本文详细解析了如何使用Batch Apktool 3.8.0进行安卓APK汉化的完整流程,包括环境配置、反编译、资源解析、深度汉化、重构建与签名优化等关键步骤。通过这款集成化逆向工具,开发者可以高效完成APK汉化,提升工作效率。 阅读详情

pickle和cPickle——python对象序列化

pickle模块引入了一个基础的但是强大的python对象序列化和反序列化的方法。(pickling and unpickling)

picking 是这样一个过程——把python对象转化为二进制流的形式,unpickling是这个的逆过程。


注意:pickle模块是不安全的,Hacker可能利用pickle模块进行恶意代码注入。对于picking过程而言并不需要担心,因为它产生的都是string,但是对于unpickling过程,unpicke一个不受信赖的string不一定是安全的,因为unpickle很可能产生无法预料的对象。所以要注意你unpickle的string的来源。

与pickle模块相近的一个模块是cPickle,正如其名它是使用c语言写的,相比之下它的速度大约是pickle模块的1000倍,然而cPickle相比pickle不支持Pickler()和Unpickler()的子类,因为在cPickle模块中只有函数并没有类的存在。cPickle模块和pickle模块在某些情况下可以互用,比如对于一个数据流(使用dump存储在文件中的数据),我们既可以使用cPickle模块的load方法也可以使用pickle模块的load方法进行读取。

<span style="font-size:14px;">>>> import cPickle
>>> import pickle
>>> class Foo:
	name = 'wang'
>>> f = open('N:\\wang.txt','w')
>>> cPickle.dump(Foo,f)
>>> f.close()
>>> f = open('N:\\wang.txt','r')
>>> print pickle.load(f)
__main__.Foo
>>> f.close()
>>> f = open('N:\\wang.txt','r')
>>> print cPickle.load(f)
__main__.Foo
>>> f.close()</span>

Python有一个更原始的模块来支持序列化——marshal ,通常情况下pickle模块的性能总是比marshal模块要好,marshal的存在主要是为了支持Python的.pyc文件。

关于pyc文件不做详细介绍,这里只需知道Python的原始代码在运行前都会被先编译成字节码,并把编译的结果保存到一个一个的PyCodeObject中,pyc 文件即是把PyCodeObject从内存中以marshal格式保存到文件后的结果。


数据流格式:

pickle生成的数据流格式是Python独有的,它的优点是在被外部标准引用时是无限制的,但是对于非Python的应用无法解析pickle产生的数据流。

默认情况下,pickle生成的数据流格式使用可打印的ASCII码,对于程序员来说具有易读性,我们只需要打开存储的txt文件就能容易的理解生成的数据流,看一下上面代码中wang.txt中的内容:

c__main__
Foo
p1

很容易理解。目前在pickling中有三种不同的协议:

protocol 0 :原始的ASCII协议,向后兼容

protocol 1:老的二进制格式,同样向后兼容

protocol 2:Python2.3引入,对于新式类(new-style classes)提供了更有效的pickling


Example:

<span style="font-size:14px;">import pickle

data1 = {'a': [1, 2.0, 3, 4+6j],
         'b': ('string', u'Unicode string'),
         'c': None}

selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)

output = open('data.pkl', 'wb')

# Pickle dictionary using protocol 0.
pickle.dump(data1, output)

# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)

output.close()</span>

<span style="font-size:14px;">import pprint, pickle

pkl_file = open('data.pkl', 'rb')

data1 = pickle.load(pkl_file)
pprint.pprint(data1)

data2 = pickle.load(pkl_file)
pprint.pprint(data2)

pkl_file.close()</span>

可以被pickle的数据类型:

  • None, True, and False
  • integers, long integers, floating point numbers, complex numbers
  • normal and Unicode strings
  • tuples, lists, sets, and dictionaries containing only picklable objects
  • functions defined at the top level of a module
  • built-in functions defined at the top level of a module
  • classes that are defined at the top level of a module
  • instances of such classes whose __dict__ or the result of calling __getstate__() is picklable (see section The pickle protocol for details).




【WRFDA教程第一期】运行观测预处理程序(OBSPROC) 运行观测预处理程序(OBSPROC) 阅读详情

相关推荐

SNN目标识别MNIST

总体来说这篇论文提出的方法用了多种更精密的细节,如LIF膜电位公式,三种STDP方法,但我觉得还可以有很大的改进,比如输入层全连接到兴奋层,兴奋层通过抑制层实现的侧向抑制,抑制层不参与学习等等。尤其是兴奋层通过抑制层实现侧向抑制这里,当神经元兴奋时,通过抑制层再倒回兴奋层,所抑制的已经经过一了一段时间的延迟。如有错误,请不吝赐教。

m0_74982304的博客 1262

Python 之 cPickle用法

序列化就是通过特殊的方法将数据存储到相应存储区的过程, 反序列化就是依据数据序列化时的规则进行反向执行, 以取出原数据的过程。在编写程序的过程中, 我们有时需要将数据进行序列化与反序列化的操作, 本篇博客旨在阐述序列化与反序列化的作用及举例说明几个常用方法的使用。

恋梦轩 2万+

NRF52832调试方法1——HardFault_Handler问题定位

一、遇到问题 keil debug模式下,直接点击全速运行(Run)发现程序卡死,点击stop按钮后,停到了HardFault_Handler位置,如下图所示。 此时使用navigate backwards(蓝色左箭头)是无效的,找不到程序卡在哪里。 二、解决办法 此时首先观察register窗口 若Stack为MSP,则复制R13(SP)的值到memory观察窗的地址搜索栏。每一行显示连续的28个地址上的存储信息,每个地址上存有一个字节。 从第21个位置起的连续四个字节是LR的值,

小梁的博客 3650

pickle cPickle使用

python2中: cPickle只是pickle的C编译版本,用法几乎相同 python3: cPickle模块已经被移除,即只剩下pickle模块 一、dump()方法 pickle.dump(obj, file, [,protocol]) 注释:序列化对象,将对象obj保存到文件file中去。参数protocol是序列化模式,默认是0(ASCII协议,表示以文本的形式进行序列化),proto...

zhe_csdn的博客 2405

esp32移植canopen协议栈(二)

本文续接上一篇文章,之前我们已经搭建好了esp32的开发环境,以及初始工程。接下来我们开始实现can驱动相关,以及使用c++封装can接口。本文使用esp32实现c++实现can驱动层的封装。下一步移植canopen!!!嘻嘻。

qq_50267418的博客 1906

TP4056在单节锂电池充电管理中的创新应用与电路优化

本文深入探讨了TP4056线性充电管理芯片在单节锂电池充电电路中的创新应用与优化方案。针对“边充边用”的核心挑战,文章详细解析了利用PMOS管构建智能供电切换电路的原理,实现了外部电源与电池供电的无缝、安全切换,有效杜绝了电池“边充边放”的风险。同时,提供了关键的元器件选型、PCB布局布线技巧及常见问题排查指南,为创客和硬件开发者提供了高性价比、高可靠性的锂电池电源管理实践方案。

rock5的博客 501

【琐碎】Python3安装/运行cPickle以及cPickle的使用

1 Python3安装/运行cPickle 运行报错,缺失cPickle包,一般这种情况,直接pip安装即可,但是这次有点特殊,我用的py3.8环境import cPickle是py2.x环境导入包的命令,在py3.x环境中不能直接导入,应该采取如下形式导入import _pickle as cPickle,改成这种导入形式之后便可成功运行 这个是我在py3环境下安装cPickle的时候报错的截图 2 cPickle的使用 主要是cPickle.dump()和cPickle.load()两个命令,分别起到

... 1万+

AI赋能运筹优化:从参数生成到智能求解的工程实践

运筹学通过线性规划、整数规划等数学模型,为供应链、物流、生产排程等复杂决策问题寻找最优解,其核心价值在于提升资源利用效率与决策科学性。传统方法依赖精确的输入参数与专家经验,面临数据不准、建模门槛高、求解调优难等挑战。人工智能技术的引入,正从原理层面重塑这一流程:通过深度学习模型生成更贴合现实的动态参数(如需求分布、行驶时间),利用自然语言处理降低建模门槛,并借助强化学习对求解器进行智能参数调优。这种AI与运筹学的融合,在工程实践中显著提升了优化系统的自适应能力与求解效率,使其在应对实时交通、柔性生产调度等动

weixin_26913055的博客 595

python中cPickle用法

在python中,一般可以使用pickle类来进行python对象的序列化,而cPickle提供了一个更快速简单的接口,如python文档所说的:“cPickle – A faster pickle”。cPickle可以对任意一种类型的python对象进行序列化操作,比如list,dict,甚至是一个类的对象等。而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复。在cPickl

怒河春醒 3万+

华为OD机试新系统真题-魔法咒语组合(Java/Py/C++/Go/C/Js)

华为OD机试 新系统真题【魔法咒语组合】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【魔法咒语组合】多语言题解

qq_45776114的博客 667

2025年5月架构设计师论文真题回顾,附写作技巧、所涉知识点及参考范文(三)

本文主要回顾2025年上半年(2025-5-24)系统架构设计师考试下午论文的题目,同时附带写作技巧、所涉知识点及参考范文。试题三:多模型数据库及应用。

一几文的编程学习笔记。 629

pickle ---python

pickle的序列化规则 http://blog.163.com/qiongling007@126/blog/static/214242962011110193074/ Python规范(Python-specific)提供了pickle的序列化规则。这就不必担心不同版本的P

我是一只笨鸟 3129

YOLOv11改进策略【Head/分割头】| 结合CVPR-2024 中的DynamicConv 动态卷积 改进分割头, 优化模型(独家改进)

在大规模视觉预训练中,通常模型的性能受到数据、参数和FLOP三个关键因素的影响。一般来说,模型的参数数量越多,FLOP也越高,但在移动设备等对计算资源有限制的场景下,需要低FLOP的模型同时又希望模型能从大规模预训练中受益。传统的方法很难在增加参数的同时保持低FLOP,因此需要一种新的设计来解决这个问题,模块应运而生。

Limiiiing的博客 2310

pickle和cPickle:Python对象的序列化

目的:Python对象序列化 可用性:pickle至少1.4版本,cPickle 1.5版本以上 pickle模块实现了一种算法,将任意一个Python对象转化成一系列字节(byets)。此过程也调用了serializing对象。代表对象的字节流之后可以被传输或存储,再重构后创建一个拥有相同特征(the same characteristics)的新的对象。 cPickle使

yixiaojiejie的专栏 987

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

pickle和cPickle:Python对象的序列化(上)

目的:Python对象序列化 可用性:pickle至少1.4版本,cPickle 1.5版本以上 pickle模块实现了一种算法,将任意一个Python对象转化成一系列字节(byets)。此过程也调用了serializing对象。代表对象的字节流之后可以被传输或存储,再重构后创建一个拥有相同特征(the same characteristics)的新的对象。 cPickle使用C而不是P

362

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python pickle_pickle和cPickle:Python对象的序列化(下)

重构对象的问题当与你自己的类一起工作时,你必须保证类被腌渍出现在读取pickle的进程的命名空间中。只有该实例的数据而不是类定义被腌渍。类名被用于在反腌渍时,找到构造器(constructor)以创建新对象。以此——往一个文件写入一个类的实例为例:pythontry:import cPickle as pickleexcept:import pickleimport sysclass Simple...

weixin_39586526的博客 248

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pickle和cPickle:Python对象的序列化(下)

承接上文 pickle和cPickle:Python对象的序列化(上) 。 重构对象的问题 当与你自己的类一起工作时,你必须保证类被腌渍出现在读取pickle的进程的命名空间中。只有该实例的数据而不是类定义被腌渍。类名被用于在反腌渍时,找到构造器(constructor)以创建新对象。以此——往一个文件写入一个类的实例为例: ...

weixin_33877092的博客 114

Python标准库05 存储对象 (pickle包,cPickle包)

在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我提到过Python“一切皆对象”的哲学,在Python中,无论是变量还是函数,都是一个对象。当Pytho...

bigzql的博客 8687

Python标准库 (pickle包,cPickle包)

作者:Vamei 出处:http://www.cnblogs.com/vamei         在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我提到过Python“一切皆对象”的哲学,在Python中,无论是变量还是函数,都是一个对象。当Python运行时,对象存储在内存中,随时等待系统的调用。然而,内存里的数据会随着计算机关机和消失,如何将对象保存到文

如果一切重来 1万+

python标准库有pickle_Python标准库05 存储对象 (pickle包,cPickle包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我提到过Python“一切皆对象”的哲学,在Python中,无论是变量还是函数,都是一个对象。当Python运行时,对象存储在内存中,随时等待系统的调用。然而,内存里的数据会随着计算机关机和消失,如何将对...

weixin_28950015的博客 162

python安装cpickle_python pickle/cPickle模块

序列化(picking): 把变量从内存中变成可存储或传输的过程称为序列化,序列化之后,就可以把序列化的对象写入磁盘,或者传输给其他设备;反序列化(unpickling):相应的,把变量的内容从序列化的对象重新读到内存里的过程称为反序列化;python中有两个模块可以实现对象的序列化,pickle和cPickle(注意P大写),cPickle是用C语言实现的,pickle是用纯python语言实现...

weixin_39884412的博客 1530

python 读取pkl_Python标准库05 存储对象 (pickle包,cPickle包)

在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我提到过Python“一切皆对象”的哲学,在Python中,无论是变量还是函数,都是一个对象。当Python运行时,对象存储在内存中,随时等待系统的调用。然而,内存里的数据会随着计算机关机和消失,如何将对象保存到文件,并储存在硬盘上呢?计算机的内存中存储的是二进制的序列 (当然,在Linux眼中,是文本流)。...

weixin_34495151的博客 230

pickle模块 python_Python 序列化 pickle/cPickle模块

Python序列化的概念很简单。内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人。你会怎么做?这取决于你想要怎么保存,怎么重用,发送给谁。很多游戏允许你在退出的时候保存进度,然后你再次启动的时候回到上次退出的地方。(实际上,很多非游戏程序也会这么干)在这种情况下,一个捕获了当前进度的数据结构需要在你退出的时候保存到硬盘上,接着在你重新启动的时候从硬盘上加载进来。Python标准库...

weixin_39532699的博客 152
上一篇: 图像的直方图
下一篇: 形态学:对象计数
cassiePython
博客等级 码龄12年 303粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值