当前位置: 首页 > 面试题库 >

是什么导致错误“ _pickle.UnpicklingError:无效的加载密钥''。”?

周辉
2023-03-14
问题内容

我正在尝试在一个数组上存储5000个数据元素。这5000个元素存储在一个现有文件中(因此它不为空)。

但是我遇到错误,我不知道是什么原因引起的。

在:

def array():

    name = 'puntos.df4'

    m = open(name, 'rb')
    v = []*5000

    m.seek(-5000, io.SEEK_END)
    fp = m.tell()
    sz = os.path.getsize(name)

    while fp < sz:
        pt = pickle.load(m)
        v.append(pt)

    m.close()
    return v

出:

line 23, in array
pt = pickle.load(m)
_pickle.UnpicklingError: invalid load key, ''.

问题答案:

酸洗是递归的,不是顺序的。因此,要腌制一个列表,pickle将开始腌制包含的列表,然后腌制第一个元素……潜入第一个元素并腌制相关性和子元素,直到第一个元素被序列化。然后移动到列表的下一个元素,依此类推,直到最终完成列表并完成对包含列表的序列化。简而言之,除了某些特殊情况外,很难将递归泡菜视为顺序的。dump如果您想以load一种特殊的方式,最好在您的样式上使用更智能的模式

最常见的泡菜,它来腌制用一个单一的一切dump到一个文件-
但你必须要load一切在一个单一一次load。但是,如果您打开文件句柄并进行多次dump调用(例如,对列表中的每个元素进行一次调用,或选定元素的元组),则您load将镜像……打开文件句柄并进行多次load调用,直到获得所有列出元素并可以重建列表。但是,选择性地load仅选择某些列表元素仍然不容易。为此,您可能必须dict使用像这样的包将列表元素存储为(以元素或块的索引为键)作为列表元素klepto,这样可以将腌制的食物分解dict
透明地放入多个文件中,并可以轻松加载特定元素。



 类似资料:
  • 问题内容: 当我尝试使用Terminal中的命令使用python创建虚拟环境时,出现以下错误: 我不是第一个遇到类似错误的人-我尝试遵循此答案的建议并运行: 那没有帮助。也没有以超级用户身份运行commmand。 接下来我应该调查什么? 问题答案: 我有完全相同的错误消息。Continuum Analytics支持小组的Ray Donnelly提供了以下解决方案,为我解决了这个问题: 当您pip安

  • 问题内容: 我正在尝试使用以下命令将标准PKCS#12(.p12)密钥库转换为Java JKS密钥库: 它失败了: 您有解决该问题的想法吗? 问题答案: pkcs12密钥库确实已损坏。

  • 我正在使用LWJGL,当使用Util.checkGLError()检查时,下面的OpenGL调用导致无效的枚举错误 GL11.glTexParameteri(GL11.GL_TEXTURE_2D,GL11.GL_Textture_WRAP_S,GL11.GL_CLAMP); 我已经把范围缩小到GL_CLAMP,因为GL_REPEAT有效。还应该指出的是,GL_CLAMP在我的笔记本电脑上运行良好,

  • 为什么我会。。。 未捕获的类型错误:string.split 不是一个函数 ...当我跑步时...

  • 我是Spring启动的新手,所以我不明白是什么导致了上面提到的错误,因为所有东西都没有警告,而且是从官方库导入的。 堆栈跟踪:

  • 我一直在阅读docs编写Dockerfiles的最佳实践。我遇到了小错误(IMHO),在进一步阅读后,其含义很清楚: 在RUN语句中单独使用apt-get更新会导致缓存问题和后续apt-get安装指令失败。 我想知道为什么失败。后来解释了他们所说的“失败”是什么意思: 由于apt get更新未运行,您的构建可能会获得过时版本的curl和nginx包。 但是,对于以下内容,我仍然无法理解他们所说的“