python3使用pickle读取文件提示TypeError或者UnicodeDecodeError的解决办法
2017-06-13 10:11
771 查看
Python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
python2使用的是cPickle模块,而在python3中cPickle已经被取消,取而代之的是pickle模块。
开发过程中,我曾经遇到一个奇怪的问题,在读取一个文件时候,使用python2的如下方式:
import cPickle
train, test, dicts = cPickle.load(open(“./dataset/atis.pkl”))
是可以正常读取文件的。
可是当换做python3的方式读取文件时候,如下:
import pickle
train, test, dicts = pickle.load(open(“./dataset/atis.pkl”))
却获得了错误提示,提示信息如下:
Traceback (most recent call last):
File “Main.py”, line 4, in
train, test, dicts = pickle.load(open(“./dataset/atis.pkl”))
TypeError: ‘str’ does not support the buffer interface
查询错误信息后得知解决办法 链接,应该指明用二进制方式打开文件,于是代码改为:
import pickle
train, test, dicts = pickle.load(open(“./dataset/atis.pkl”, “rb”))
可是这时候错误变成了:
Traceback (most recent call last):
File “Main.py”, line 4, in
train, test, dicts = pickle.load(open(“./dataset/atis.pkl”, “rb”))
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe8 in position 0: ordinal not in range(128)
于是再次求助万能的google,终于找到了解决办法 链接,我们需要告诉pickle:how to convert python bytestring data to Python 3 strings,The default is to try and decode all string data as ASCII,所以代码改为:
import pickle
train, test, dicts = pickle.load(open(“./dataset/atis.pkl”, “rb”), encoding=’iso-8859-1’)
问题终于的到了解决。
python2使用的是cPickle模块,而在python3中cPickle已经被取消,取而代之的是pickle模块。
开发过程中,我曾经遇到一个奇怪的问题,在读取一个文件时候,使用python2的如下方式:
import cPickle
train, test, dicts = cPickle.load(open(“./dataset/atis.pkl”))
是可以正常读取文件的。
可是当换做python3的方式读取文件时候,如下:
import pickle
train, test, dicts = pickle.load(open(“./dataset/atis.pkl”))
却获得了错误提示,提示信息如下:
Traceback (most recent call last):
File “Main.py”, line 4, in
train, test, dicts = pickle.load(open(“./dataset/atis.pkl”))
TypeError: ‘str’ does not support the buffer interface
查询错误信息后得知解决办法 链接,应该指明用二进制方式打开文件,于是代码改为:
import pickle
train, test, dicts = pickle.load(open(“./dataset/atis.pkl”, “rb”))
可是这时候错误变成了:
Traceback (most recent call last):
File “Main.py”, line 4, in
train, test, dicts = pickle.load(open(“./dataset/atis.pkl”, “rb”))
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe8 in position 0: ordinal not in range(128)
于是再次求助万能的google,终于找到了解决办法 链接,我们需要告诉pickle:how to convert python bytestring data to Python 3 strings,The default is to try and decode all string data as ASCII,所以代码改为:
import pickle
train, test, dicts = pickle.load(open(“./dataset/atis.pkl”, “rb”), encoding=’iso-8859-1’)
问题终于的到了解决。
相关文章推荐
- python3使用pickle读取文件提示TypeError或者UnicodeDecodeError的解决办法
- python3使用pickle读取文件提示TypeError或者UnicodeDecodeError的解决办法
- Python 写文件报错TypeError的解决办法
- C#操作Office文件,成功释放,但读取文件时提示"文件***正由另一进程使用,因此该进程无法访问此文件"的解决办法
- 手把手教你:python读取.htm文件报错:UnicodeDecodeError: 'utf8' codec can't decode byte 0xb3 in position 0的解决方法
- 手把手教你:python读取.htm文件报错:UnicodeDecodeError: 'utf8' codec can't decode byte 0xb3 in position 0的解决方法
- OSX Cocoa app使用fopen读取本地文件提示没有权限的解决办法
- python2.7 使用super关键词 报错 TypeError: must be type, not classobj 解决办法
- python2.7 使用super关键词 报错 TypeError: must be type, not classobj 解决办法
- 使用 STM8L DISCOVERY 示例程序添加库文件出现 Error[Li005]: no definition for XXX 的解决办法
- 使用SIlverlight 4.0开发时,遇到提示"...Missoft.Silverlight.CSharp.Targets"文件路径不对的解决办法
- U-Boot中使用tftp下载文件出现错误TFTP error: 'Access violation' (2)的解决办法
- 在flex中使用RemoteObject保存数据提示Type Error#1009 错误解决
- 读取war包中的文件及Ant使用中的OutOfMemoryError解决
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
- 黄聪:VS2010启动程序提示文件加载 使用 简体中文(GB2312)编码加载文件解决办法
- U-Boot中使用tftp下载文件出现错误TFTP error: 'Access violation' (2)的解决办法
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
- coreseek索引或者查询时提示ERROR: invalid token in etc解决办法
- 解决Java读取properties文件的中文问题的新办法(不使用native2ascii.exe及其他工具)