2017-02-15 3 views
3

Я хочу сохранить объект Python, который содержит несколько numpy массивов в файле. Я нашел pickle, но я всегда получаю UnicodeDecodeError при загрузке сохраненного объекта:Pickle UnicodeDecodeError

Traceback (most recent call last): 
File "system.py", line 46, in <module> 
    m2 = System.loadMemory('m1.pickle') 
File "system.py", line 28, in loadMemory 
    memory = pickle.load(filehandler) 
    File "/home/daniel-u1/anaconda3/lib/python3.5/codecs.py", line 321, in 
    decode (result, consumed) = self._buffer_decode(data, self.errors, final) 
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte 

Метод saveMemory работает отлично, но loadMemory бросает ошибку в pickle.load:

@staticmethod 
def saveMemory(m1, filename): 
    filehandler = open(filename, 'wb') 
    pickle.dump(m1, filehandler) 

@staticmethod 
def loadMemory(filename): 
    filehandler = open(filename, 'r') 
    memory = pickle.load(filehandler) 
    return memory 

кто-нибудь представление о том, решить эту проблему?

+2

Почему вы записываете файл в двоичном режиме и читаете в текстовом режиме? – user2357112

+2

Другими словами, используйте 'open (filename, 'rb')', чтобы открыть файл в 'loadMemory()'. – martineau

+1

@martineau Большое спасибо, это была вещь. Не могли бы вы ответить в отдельном сообщении, чтобы я мог отметить это как решение? – 111

ответ

2

Проблема заключается в том, что вы написали файл двоичного режима ('wb'), но затем попробуйте прочитать его в текстовом режиме ('r'). Поэтому, чтобы исправить это все, что вам нужно сделать, это изменить одну строку:

@staticmethod 
    def loadMemory(filename): 
     filehandler = open(filename, 'rb') # must read in binary mode, too 
     memory = pickle.load(filehandler) 
     return memory