学习
实践
活动
工具
TVP
写文章
专栏首页Python疯子python pickle 模块的使用以及2种典型报错处理

python pickle 模块的使用以及2种典型报错处理

用于序列化的两个模块

json:用于字符串和Python数据类型间进行转换   pickle: 用于python特有的类型和python的数据类型间进行转换   json提供四个功能:dumps,dump,loads,load   pickle提供四个功能:dumps,dump,loads,load

pickle可以存储什么类型的数据呢?

所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。 由任何原生类型组成的列表,元组,字典和集合。 函数,类,类的实例

pickle模块中常用的方法有:

  1. pickle.dump(obj, file, protocol=None,) 必填参数obj表示将要封装的对象 必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb” 可选参数protocol表示告知pickler使用的协议,支持的协议有0,1,2,3,4 , 默认的协议是添加在Python 3中的协议3。
  2. pickle.load(file,*,fix_imports=True, encoding="ASCII", errors="strict") 必填参数file必须以二进制可读模式打开,即“rb”,其他都为可选参数
  3. pickle.dumps(obj, protocol=None):以字节对象形式返回封装的对象,不需要写入文件中
  4. pickle.loads(bytes_object): 从字节对象中读取被封装的对象,并返回

简单实用示例

# dumps功能
import pickle
data = ['aa', 'bb', 'cc']
# dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
p_str = pickle.dumps(data)
print(p_str)

# loads功能
# loads  将pickle数据转换为python的数据结构
ret = pickle.loads(p_str)
print(ret)

 # dump功能
# dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

# load功能
# load 从数据文件中读取数据,并转换为python的数据结构
with open('data.pkl', 'rb') as f:
    data = pickle.load(f)

#输出结果
b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.'
['aa', 'bb', 'cc']

注意 !注意!!注意!!!重要的事情说三遍 如果要保存的信息是原生数据类型时,以上实用完全可以满足要求,

一、只能加载一次:EOFError: Ran out of input

错误信息

报错原因,数据提前解析

错误代码

二、保存的数据为类对象时需要注意路径问题:

实用时错误产生原因,

用pickledumps()封装类对象,并将数据保存至阿里云,然后用在另一个服务解析数据,导致我数据能拿到,但不能正确解析出类对象,后来发现是缺少了对应的类对象,并且类对象要和打包时的类对象路径保持一致

pickle.dumps()或pickle.dump()封装时,会根据你所加载的类对象对数据进行对象化,同时也会把类对象的路径也打包进去,记录下它是根据那个目录下的哪个类进行封装的,同样解析时也要找到对应目录下的对应类进行解析还原

在同一个项目或文件中能完全使用,因为类对象路径没有变化

在另一个项目中加载pickle对象,错误信息如下: ModuleNotFoundError: No module named 'pickle_test.model' 可以打印pickle信息进行确认:

pickle信息

可以看出是要还原成目录pickle_test.model下的Person对象类型,但是找不到,所以只需要把对应的目录和类还原回去即可

还原类型

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://www.jianshu.com/u/bdf11cce83a1复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • python︱处理与使用json格式的数据(json/UltraJSON/Demjson)、pickle模块、yaml模块

    python种关于json有很多,simplejson,cjson,还有ujson(详细内容可见:http://blog.csdn.net/gzlaiyongh...

    悟乙己
  • python︱处理与使用json格式的数据(json/UltraJSON/Demjson)、pickle模块

    版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! ...

    悟乙己
  • python 序列化数据:pickle与json ,dumps与loads,解决can't pickle _thread.lock objects

    pickle 只能在python中用python文件间序列化,实现了两个python 内存数据的交互(可序列化任何对象(类,列表)) json 在任何软件间可...

    学到老
  • Python 反序列化漏洞学习笔记

    Python 中有很多能进行序列化的模块,比如 Json、pickle/cPickle、Shelve、Marshal

    lbyxiaolizi
  • python3 pickle模块详解

    python程序运行中得到了一些字符串,列表,字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。python模块大全中pi...

    周小董
  • Python函数和文件操作

    本篇来说一下函数和文件。函数在编程中是一个很重要的角色,我们可以将若干个语句组合形成一个函数,它可以接受传入参数,并在内部进行相关计算后产生输出,将语句封装成函...

    码农向前冲
  • 全!Python函数和文件操作合集(长文系列第三篇)

    系列第三篇来说一下函数和文件。函数在编程中是一个很重要的角色,我们可以将若干个语句组合形成一个函数,它可以接受传入参数,并在内部进行相关计算后产生输出,将语句封...

    奶糖猫
  • Python输入输出(IO)[通俗易懂]

    程序会有输入和输出,输入可以从标准输入或是从一个文件读入数据,程序的输出可以以一种友好可读的方式(human-readable)打印出来,或是写进一个文件,而标...

    全栈程序员站长
  • python|浅谈Python中的pickle模块

    Pickle模块用于将python对象序列化为字节流,可存储在文件或数据库中,也可同通过网络进行传输。使用反序列化(Unpickle)可以将生成的字节流转换回p...

    算法与编程之美
  • 使用Python验证并利用Redis未授权漏洞

    Python序列化是将Python对象及其所拥有的层次结构转化为一个字节流的过程,反序列化是将字节流转化回一个对象层次结构。

    Ms08067安全实验室
  • Python学习笔记_Day06

    没有异常处理,程序遇到错误就崩溃终止执行了。异常处理需要发现问题,并给出解决问题的编码方案,使得程序 再遇到错误时,不会崩溃,仍然能够向下继续执行。

    非著名运维
  • Python 序列化模块(json,pi

    JSON (JavaScript Object Notation):是一个轻量级的数据交换格式模块,受javascript对象文本语法启发,但不属于JavaSc...

    py3study
  • Python在Finance上的应用5 :自动获取是S&P 500的成分股

    欢迎来到Python for Finance教程系列的第5讲。 在本教程和接下来的几篇文章中,我们将着手研究如何为更多公司提供大量的定价信息,以及我们如何一次处...

    用户6021891
  • python安装与IO编程

    注:在选择安装组件时勾选所有组件,特别注意勾选pip和Add python.exe to Path

    py3study
  • 解决windows下python3使用multiprocessing.Pool出现的问题

    Windows下面的multiprocessing跟Linux下面略有不同,Linux下面基于fork,fork之后所有的本地变量都复制一份,因此可以使用任意的...

    砸漏
  • Datawhale组队学习 -- Task09:文件与文件系统

    open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, c...

    余生大大
  • python序列化

    Serialization系列化,将内存中对象存储下来,把他变成一个个字节。二进制。

    菲宇
  • python常见模块之序列化(json与pickle以及shelve)

    什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serializatio...

    人生不如戏
  • 序列化和反序列化

    内存中的字典、列表、集合以及各种对象,如何保存到一个文件中? 如果是自己定义的类的实例,如何保存到一个文件中? 如何从文件中读取数据,并让它们在内存中再次变成自...

    玖柒的小窝

扫码关注腾讯云开发者

领取腾讯云代金券