Pycharm报错:Python2中的导入cPickle包换成Python3环境之后无法用--解决方法

本文介绍Python3中pickle模块替代cPickle的使用方法,讲解如何用pickle处理字典、列表等复杂数据结构的保存与读取,并提供了解决pickle在Python3中遇到的UnicodeDecodeError编码问题的具体方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因是因为在Python3中cPickle包已经更名为pickle,所以使用方法也相应地改变了。具体方法如下:

import pickle as cPickle

也可以直接导入pickle包更方便。

import pickle

pickle可以把字典、列表等结构化数据存到本地文件,读取后返回的还是字典、列表等结构化数据。但是file.write、file.read存取的对象是字符串。 读取得到的字符串需要再次加工处理才能转换为字典、列表等,所以pickle的存在是为了方便特殊类型数据的保存。

若将cPickle包改为pickle包之后还出现编码的问题
报错:UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe7 in position 0: ordinal not in range
原因:python3中的pickle需要指定一下编码
解决方法如下:
方法一:

fp = open(file_name, 'rb')
u = pickle._Unpickler(fp)
        u.encoding = 'latin'
        params = u.load()

方法二:

  fp = open(file_name, 'rb')
  params = pickle.load(fp, encoding='latin')

但是有时候导入包之后也不需要指定编码,反正如果编译器没报这个错的话,也无需指定编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值