ValueError: unsupported pickle protocol: 5

Python读取pickle文件报错protocol:5

项目场景:

Python利用pandas读取pickle文件(dataframe)


问题描述:

Python读取pickle文件(这里是pkl压缩了的gzip文件哟)报错:ValueError: unsupported pickle protocol: 5

Python读取pickle文件代码:

import pandas as pd

df = pd.read_pickle("filename.pkl", compression='gzip')

原因分析:

明显是pickle 的问题,所以直接找到官网!pickle官方说明
可以看到:

There are currently 6 different protocols which can be used for pickling. The higher the protocol used, the more recent the version of Python needed to read the pickle produced.

Protocol version 0 is the original “human-readable” protocol and is backwards compatible with earlier versions of Python.

Protocol version 1 is an old binary format which is also compatible with earlier versions of Python.

Protocol version 2 was introduced in Python 2.3. It provides much more efficient pickling of new-style classes. Refer to PEP 307 for information about improvements brought by protocol 2.

Protocol version 3 was added in Python 3.0. It has explicit support for bytes objects and cannot be unpickled by Python 2.x. This was the default protocol in Python 3.0–3.7.

Protocol version 4 was added in Python 3.4. It adds support for very large objects, pickling more kinds of objects, and some data format optimizations. It is the default protocol starting with Python 3.8. Refer to PEP 3154 for information about improvements brought by protocol 4.

Protocol version 5 was added in Python 3.8. It adds support for out-of-band data and speedup for in-band data. Refer to PEP 574 for information about improvements brought by protocol 5.
对应的协议5是3.8中的哦!!!!!所以当时在pickle.dump的时候是在python3.8中使用协议5序列化的!


解决方案:

那就是安装python3.8及其以上版本才能load()啦,卸载了之前的3.6重新安装就成功了!接下来就是DataFrame - 访问数据咯。

结论

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 这个错误通常出现在使用较旧的Python版本尝试加载由较新版本Python生成的pickle文件时。pickle是Python中的一个序列化模块,它可以将Python对象转换为一种字节流格式,以便在不同程序之间传输或保存到文件中。 在Python 3.8及更高版本中,默认pickle协议版本为5。但是,在旧版本Python中,只支持较旧的pickle协议版本(如协议0、1、2、3和4),因此当尝试加载较新版本的pickle文件时,就会出现“valueerror: unsupported pickle protocol: 5”错误。 要解决此问题,可以尝试以下解决方法之一: 1.在较新的Python版本中重新生成pickle文件,使用较旧的协议版本(例如协议4或更低版本)。 2.升级到较新的Python版本,以支持pickle协议版本5。 3.使用第三方库(例如pickle5)在较旧的Python版本中加载pickle文件,该库提供了对pickle协议版本5的支持。 希望这可以帮助解决您遇到的问题! ### 回答2: ValueError: Unsupported pickle protocol: 5是Python对象序列化和反序列化过程中的错误。pickle是一种Python标准模块,用于将Python对象序列化为二进制流进行存储或网络传输,也可将序列化后的二进制流反序列化为Python对象。 当执行pickle.load()或pickle.loads()函数时,会将二进制流转换为Python对象。但是,如果二进制流的pickle协议版本高于当前Python解释器所支持的最高版本,就会出现“Unsupported pickle protocol”错误。通常情况下,Python的最新版本同时支持当前版本和旧版本的pickle协议,因此这种情况比较少见。 解决此类错误有两种方法: 1.升级Python版本。如果是使用旧版本的Python解释器,可以尝试升级到最新版本。最新版本支持更高版本的pickle协议,可能可以解决此错误。 2.降低pickle协议的版本。如果不能升级Python解释器,可以尝试通过使用更低版本的pickle协议来序列化和反序列化对象。例如,可以使用pickle模块的dump()函数或dumps()函数中的protocol参数来指定pickle协议的版本。如果protocol参数的值大于当前Python解释器所支持的最高版本,也会出现“Unsupported pickle protocol”错误。 总之,当遇到“ValueError: Unsupported pickle protocol: 5”错误时,可以尝试升级Python版本或降低pickle协议的版本以解决问题。 ### 回答3: valueerror: unsupported pickle protocol: 5 报错是由于Python进行序列化过程中的版本不同导致的。Python的pickle模块可以将Python的任意对象转换为字节序列,然后将其存储到文件中或通过网络发送,同时可以再将这些字节序列转换为原先的对象。这个过程叫做序列化。在进行反序列化时,Python会检查序列中使用的协议版本,如果当前Python版本不支持序列中使用的协议,则会报上述的错误。 Python 3.8以上版本的pickle模块默认使用协议5,而以前的版本则默认使用协议4。如果一个程序在Python 3.8以上版本中使用协议5序列化了一个对象,然后尝试在Python 3.7或以前的版本中反序列化这个对象,就会触发unsupported pickle protocol: 5 这个错误。 要解决这个问题,可以尝试以下几种方法: 1.升级Python版本到3.8以上,这样就能支持协议5了。 2.使用协议4进行序列化,这个方法可以在Python 3.8以上和3.7以下的版本中进行反序列化。可以在使用 pickle.dump() 或 pickle.dumps() 时,设置 protocol=4 参数,如:pickle.dump(obj, file, protocol=4)。 3.使用不同的序列化库,比如JSON或Msgpack等。这些库与Python本身无关,因此不会受到Python版本的限制。同时,这些库生成的数据也比pickle更加可读和更容易与其他语言的解析器互操作。 总而言之,在使用pickle模块时,需要注意Python版本的兼容性,尽可能确保序列化和反序列化的Python版本一致,或者选择一些版本无关的序列化库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头脑风暴OO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值