[英]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.