2016-09-16 452 views
1

我想從CIFAR-10數據集中讀取數據文件。我已經下載了它,但我無法讀取這些文件。 我用來讀取文件的代碼。無法讀取python中的「Binary(application/octet-stream)」文件?

def unpickle(file): 
    print(file) 
    import pickle 
    fo = open(file, 'rb') 
    dict = cPickle.load(fo) 
    fo.close() 
    return dict 
    file = 'data_batch_1' 

它顯示錯誤」

Traceback (most recent call last): 
File "basiccnn.py", line 28, in <module> 
data1 = unpickle(file) 
File "basiccnn.py", line 23, in unpickle 
dict = cPickle.load(fo) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6: ordinal not in range(128) 
+0

什麼讓你相信你有一個泡菜文件? –

+0

@ IgnacioVazquez-Abrams,https://www.cs.toronto.edu/~kriz/cifar.html –

+0

您下載了Python版本,是否正確? –

回答

0

因爲你獲得:

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

你似乎有一個編碼問題,根據pickle.loads(),默認編碼ASCII使用這可能是你爲什麼得到這個錯誤。設置編碼「字節」修復該問題:

data = pickle.load(fo, encoding='bytes') 

兩件事:

  1. cPickle更名爲_pickle在Python 3,但你應該只使用pickle

  2. 將變量命名爲內置類型是一種可怕的做法。 dict由字典數據類型使用。改用其他一些不明確的名稱,如data