请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

函数pickle.load(f, encoding='bytes')

在2-5数据处理与模型图构建(1)中,出现了函数:
def load_data(filename):
""“read data from data file.”""
with open(filename, ‘rb’) as f:
data = pickle.load(f, encoding=‘bytes’)
return data[b’data’], data[b’labels’]

  1. 查询相关资料,pickle.load的作用是反序列化,也就是把二进制文件进行解码,不知道这样理解对不对?
  2. 既然是解码为什么函数的参数是encoding=“bytes”,难道不应该是"utf-8"或者“ASCII”?
  3. 我在电脑中测试上面的参数都失败了,如果上面的能够成功解码,那么return 后面是否应该是data[“data”].

正在回答 回答被采纳积分+3

2回答

慕仔2575155 2020-11-22 10:25:16

我也遇到这个问题了,后面加了encoding = 'bytes',同时还发现,data[b’labels’]的type不是str了,反而变成了bytes

不过最终也不影响输出和读入数据

0 回复 有任何疑惑可以回复我~
正十七 2019-06-27 17:33:24

同学你好,你检查下你用的python版本,你贴的代码是python3的,如果用的是python2的环境,那么会失败。

pickle.load是反序列化。参数是bytes是由如何存储数据决定的,在我们使用的例子里,是bytes。你可以试试python2的用法

def load_data(filename):
    """read data from data file."""
    with open(filename, 'rb') as f:
        data = cPickle.load(f)
    return data['data'], data['labels']


0 回复 有任何疑惑可以回复我~
  • 请教老师,如果用python3,谷歌的colab里面没有cPickle这个包,只有前面一位同学提问里的pickle.load,所以我们只能用python3,输出的结果每一个都会带'b',会是:
    with open(os.path.join(CIFAR_DIR,"data_batch_1"),'rb') as f:
      data=pickle.load(f,encoding='bytes')
      print(type(data))
      print(data.keys())
    输出:
    <class 'dict'>
    dict_keys([b'batch_label', b'labels', b'data', b'filenames'])
    每一个都带了个'b’
    回复 有任何疑惑可以回复我~ 2019-11-01 15:50:11
  • key上带‘b’倒还好,这样取出来的数据能正常读取么?
    回复 有任何疑惑可以回复我~ 2019-11-17 19:39:44
  • 可以正常读
    回复 有任何疑惑可以回复我~ 2019-11-18 11:10:00
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信