【问题标题】:Pickle UnicodeDecodeErrorPickle UnicodeDecodeError
【发布时间】:2017-02-15 17:40:24
【问题描述】:

我想在一个文件中存储一个包含多个 numpy 数组的 Python 对象。我找到了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 工作正常,但loadMemorypickle.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

有人知道如何解决这个问题吗?

【问题讨论】:

  • 为什么要以二进制模式写入文件并以文本模式读取?
  • 也就是说,使用open(filename, 'rb')打开loadMemory()中的文件。
  • @martineau 非常感谢,就是这样。您能否在单独的帖子中回答,以便我可以将其标记为已解决?

标签: python python-3.x object pickle


【解决方案1】:

问题是您以二进制模式 ('wb') 编写文件,然后尝试以文本模式 ('r') 将其读回。因此,要修复它,您需要做的就是更改一行:

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

【讨论】:

    猜你喜欢
    • 2017-03-22
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多