pet*_*bel 5 python serialization pickle python-2.7 python-3.x
我正在尝试使用包含python特殊版本的CIFAR-10数据集.
它是一组二进制文件,每个文件代表10k numpy矩阵的字典.这些文件显然是由python2创建的cPickle.
我试着从python2加载它,如下所示:
import cPickle
with open("data/data_batch_1", "rb") as f:
data = cPickle.load(f)
Run Code Online (Sandbox Code Playgroud)
这真的很棒.但是,如果我尝试从python3加载数据(没有,cPickle而是pickle替代),它会失败:
import pickle
with open("data/data_batch_1", "rb") as f:
data = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)
如果失败并出现以下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式将原始数据集转换为可从python3读取的新数据集吗?或者我可能以某种方式从python3直接读取它?
我已经尝试加载它cPickle,将其转储json并读回来pickle,但是numpy矩阵显然不能写成json文件.
你需要告诉pickle用于那些字节串的编解码器,或者告诉它加载数据bytes.从pickle.load()文档:
的编码和错误告诉泡菜如何被Python 2腌8位字符串实例进行解码; 这些默认分别为'ASCII'和'strict'.该编码可以是"字节"作为字节对象读取这些8位串的实例.
要将字符串加载为以下bytes对象:
import pickle
with open("data/data_batch_1", "rb") as f:
data = pickle.load(f, encoding='bytes')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2881 次 |
| 最近记录: |