Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在一个文件中Pickle多个对象?_Python_Pickle - Fatal编程技术网

Python 如何在一个文件中Pickle多个对象?

Python 如何在一个文件中Pickle多个对象?,python,pickle,Python,Pickle,在我的例子中,我希望(使用pickle.dump())将两个单独的列表pickle到一个文件中,然后从一个单独的文件中检索它们,但是当使用pickle.load()时,我很难找到一个列表的结尾和下一个列表的开头,因为我根本不知道如何pickle.dump()以一种易于检索的方式读取它们,即使在查看文档之后也是如此。pickle将按照您转储它们的相同顺序读取它们 import pickle test1, test2 = ["One", "Two", "Three"], ["1", "2", "3

在我的例子中,我希望(使用
pickle.dump()
)将两个单独的列表pickle到一个文件中,然后从一个单独的文件中检索它们,但是当使用
pickle.load()
时,我很难找到一个列表的结尾和下一个列表的开头,因为我根本不知道如何
pickle.dump()
以一种易于检索的方式读取它们,即使在查看文档之后也是如此。

pickle
将按照您转储它们的相同顺序读取它们

import pickle

test1, test2 = ["One", "Two", "Three"], ["1", "2", "3"]
with open("C:/temp/test.pickle","wb") as f:
    pickle.dump(test1, f)
    pickle.dump(test2, f)
with open("C:/temp/test.pickle", "rb") as f:
    testout1 = pickle.load(f)
    testout2 = pickle.load(f)

print testout1, testout2
打印出
['1','2','3']['1','2','3']
。要对任意数量的对象进行pickle,或者只是为了使它们更易于使用,可以将它们放入元组中,然后只需对一个对象进行pickle

import pickle

test1, test2 = ["One", "Two", "Three"], ["1", "2", "3"]
saveObject = (test1, test2)
with open("C:/temp/test.pickle","wb") as f:
    pickle.dump(saveObject, f)
with open("C:/temp/test.pickle", "rb") as f:
    testout = pickle.load(f)

print testout[0], testout[1]

打印出
['One'、'Two'、'Three']['1'、'2'、'3']

您是否尝试过将它们作为子列表写入封闭列表中,例如
my_list=[[list_1]、[list_2]]
或类似的列表,或者以某种方式将它们合并到单个数据结构中进行pickle?如果您将两个列表一个接一个地与
pickle.dump(l1,f)放在同一个文件中; pickle.dump(l2,f)
,然后可以使用
l1=pickle.load(f)以相同的顺序从同一文件中取消pickle.dump;l2=pickle.load(f)
。泡菜会找到一个终点,另一个起点。我试试看,谢谢。如果这不起作用,我会使用子列表,我没有想到。为什么不腌制一个列表的元组呢<代码>pickle.dump((l1,l2,fh)和
l1,l2=pickle.load(fh)
?谢谢我让它工作了!我会尝试使用你的一些其他建议来尽可能提高效率。谢谢你,我现在知道pickle会按照它们被pickle的顺序来阅读它们。这是一个提示,供登陆这里希望将多个数据帧保存到一个pickle中的人使用。您可以与上面类似,但将所有数据帧保存到字典中:
df_dicts={}
then
df_dicts[0],df_dicts[1],df_dicts[2]=df1,df2,df3
。在转储时,只需使用df_dicts。
是否应该在open…“wb”
后面加上一个
f。close()
?@Dan会为您处理好它!