Python pickle-在一个文件中放置多个对象?

Python pickle-在一个文件中放置多个对象?,python,file,pickle,Python,File,Pickle,我有一个方法,可以将大量的pickle对象(实际上是元组)转储到一个文件中 我不想把它们放在一个列表中,我真的想在同一个文件中转储几次。 我的问题是,如何再次加载对象? 第一个和第二个对象只有一行长,因此这适用于readlines。 但是其他的都更长。 当然,如果我尝试 myob = cpickle.load(g1.readlines()[2]) 其中g1是文件,我得到一个EOF错误,因为我的pickle对象长于一行。 有没有办法只获取我的pickle对象?不要尝试将它们作为文件的行读回,只需

我有一个方法,可以将大量的pickle对象(实际上是元组)转储到一个文件中

我不想把它们放在一个列表中,我真的想在同一个文件中转储几次。 我的问题是,如何再次加载对象? 第一个和第二个对象只有一行长,因此这适用于readlines。 但是其他的都更长。 当然,如果我尝试

myob = cpickle.load(g1.readlines()[2])
其中g1是文件,我得到一个EOF错误,因为我的pickle对象长于一行。
有没有办法只获取我的pickle对象?

不要尝试将它们作为文件的行读回,只需读取所需对象的数量即可。请参阅我对问题的回答,以获取这样做的示例。

如果将文件句柄直接传递到pickle中,则可以得到所需的结果

import pickle

# write a file
f = open("example", "w")
pickle.dump(["hello", "world"], f)
pickle.dump([2, 3], f)
f.close()

f = open("example", "r")
value1 = pickle.load(f)
value2 = pickle.load(f)
f.close()
pickle.dump
将附加到文件末尾,因此您可以多次调用它以写入多个值

pickle.load
将仅从文件中读取足够的内容以获取第一个值,使文件句柄保持打开状态并指向文件中下一个对象的开头。然后,第二个调用将读取第二个对象,并将文件指针保留在文件末尾。第三次调用将失败,出现您预期的
eoferor


虽然在我的示例中使用了普通的老式
pickle
,但这种技术与
cPickle

的工作原理相同,我认为最好的方法是在存储数据之前将其打包到单个对象中,然后在加载数据之后将其解压缩。下面是一个使用 元组作为容器(
也可以使用dict
):


为什么把它们都放在一个列表中是个问题呢?也可以从这个答案中看到阅读多个pickle的答案。这也适用于cpickle吗?(显然不是…)op特别说“我不想把所有的对象放在一个列表中。”他想按顺序写它们。@尼克:可能是这样,但op没有说他们不想把它们放在
元组中。
a = [1,2]
b = [3,4]

with open("tmp.pickle", "wb") as f:
    pickle.dump((a,b), f)

with open("tmp.pickle", "rb") as f:
    a,b = pickle.load(f)