簡體   English   中英

如何使用python3 pickle通過python2 cPikle讀取序列化數據?

[英]How to read serialized data by python2 cPikle with python3 pickle?

我正在嘗試使用CIFAR-10數據集 ,其中包含python的特殊版本

它是一組二進制文件,每個代表10k numpy矩陣的字典。 這些文件顯然是由python2 cPickle創建的。

我試圖從python2加載它,如下所示:

import cPickle
with open("data/data_batch_1", "rb") as f:
    data = cPickle.load(f)

這真的很棒。 但是,如果我嘗試從python3(不是cPickle而是pickle )中加載數據,它將失敗:

import pickle
with open("data/data_batch_1", "rb") as f:
    data = pickle.load(f)

如果失敗並出現以下錯誤:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6: ordinal not in range(128)

我可以以某種方式將原始數據集轉換為可以從python3讀取的新數據集嗎? 或者我可以以某種方式直接從python3中讀取它嗎?

我試過通過cPickle加載它,將其轉儲到json ,然后通過pickle讀回,但是numpy矩陣顯然不能寫為json文件。

您需要告訴pickle這些字節串要使用哪種編解碼器,或者告訴它將數據加載為bytes pickle.load()文檔中

編碼錯誤告訴pickle如何解碼Python 2腌制的8位字符串實例。 它們分別默認為“ ASCII”和“ strict”。 編碼可以是“字節”,以將這些8位字符串實例讀取為字節對象。

要將字符串作為bytes對象加載:

import pickle
with open("data/data_batch_1", "rb") as f:
    data = pickle.load(f, encoding='bytes')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM