python3使用pickle读取文件提示TypeError或者UnicodeDecodeError的解决办法
2016-03-27 22:06
891 查看
版权声明:本文为原创文章:/article/10351111.html
python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
python2使用的是cPickle模块,而在python3中cPickle已经被取消,取而代之的是pickle模块。
开发过程中,我曾经遇到一个奇怪的问题,在读取一个文件时候,使用python2的如下方式:
是可以正常读取文件的。
可是当换做python3的方式读取文件时候,如下:
却获得了错误提示,提示信息如下:
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
查询错误信息后得知解决办法 链接,应该指明用二进制方式打开文件,于是代码改为:
可是这时候错误变成了:
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,所以代码改为:
问题终于的到了解决。
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')
问题终于的到了解决。
相关文章推荐
- python图片处理Image和skimage的不同
- Python学习之路--进程,线程,协程
- 2016-3-27 Python学习
- 如何利用Python库urllib2获取百度搜索引擎加密链接(续)
- Python中多维数组flatten的技巧
- Python1————安装
- Leetcode 4. Median of Two Sorted Arrays(python)
- 机器学习实战(5)--SVM(Support vector machine)(六)--Python实现
- Python基础2:反射、装饰器、JSON,接口
- Leetcode 3. Longest Substring Without Repeating Characters(python)
- Python 生成器 匿名生成器
- Leetcode 2. Add Two Numbers(python)
- Python3.x学习笔记(一)
- Leetcode 1. Two Sum(python)
- 我的Python学习之路之基本语法-函数
- 树莓派瞎玩~5~控制GPIO之Python
- 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第二篇)
- python filter, map, reduce, lamda
- 解决im.show()不能显示图片问题
- Python3基本数据类型