酸洗是递归的,不是顺序的。因此,要腌制一个列表,pickle将开始腌制包含的列表,然后腌制第一个元素……潜入第一个元素并腌制相关性和子元素,直到第一个元素被序列化。然后移动到列表的下一个元素,依此类推,直到最终完成列表并完成对包含列表的序列化。简而言之,除了某些特殊情况外,很难将递归泡菜视为顺序的。dump如果您想以load一种特殊的方式,最好在您的样式上使用更智能的模式。
最常见的泡菜,它来腌制用一个单一的一切dump到一个文件-但你必须要load一切在一个单一一次load。但是,如果您打开文件句柄并进行多次dump调用(例如,对列表中的每个元素进行一次调用,或选定元素的元组),则您load将镜像……打开文件句柄并进行多次load调用,直到获得所有列出元素并可以重建列表。但是,选择性地load仅选择某些列表元素仍然不容易。为此,您可能必须dict使用像这样的包将列表元素存储为(以元素或块的索引为键)作为列表元素klepto,这样可以将腌制的食物分解dict透明地放入多个文件中,并可以轻松加载特定元素。
解决方法我正在尝试在一个数组上存储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 arraypt = pickle.load(m)_pickle.UnpicklingError: invalid load key,’’.