【问题标题】:How can you Pickle multiple objects in one file? [duplicate]如何在一个文件中腌制多个对象? [复制]
【发布时间】:2017-07-10 02:10:46
【问题描述】:

就我而言,我希望将两个单独的列表腌制(使用pickle.dump())到一个文件中,然后从一个单独的文件中检索它们,但是当使用pickle.load() 时,我一直在努力寻找一个列表的结束位置和下一个列表的开始位置因为我根本不知道如何pickle.dump() 以使它们易于检索,即使在查看文档之后也是如此。

【问题讨论】:

  • 您是否尝试过将它们写为封闭列表中的子列表,例如my_list = [[list_1], [list_2]]) 或类似的或以某种方式将它们合并到单个数据结构中以腌制?
  • 如果你用pickle.dump(l1,f); pickle.dump(l2,f)在同一个文件中一个接一个地腌制两个列表,那么你可以用l1=pickle.load(f); l2=pickle.load(f)从同一个文件中以相同的顺序取消它们。 Pickle 会找到一个结束和另一个开始的地方。
  • 我试试看,谢谢。如果这不起作用我会使用子列表,这是我没有想到的。
  • 为什么不从列表中提取一个元组? pickle.dump((l1, l2), fh)l1, l2 = pickle.load(fh)?
  • 谢谢我让它工作了!我会尝试使用您的其他一些建议来使其尽可能高效。

标签: python pickle


【解决方案1】:

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

打印出['One', 'Two', 'Three'] ['1', '2', '3']。要腌制任意数量的对象,或者只是让它们更易于使用,您可以将它们放在一个元组中,然后您只需腌制一个对象。

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']

【讨论】:

  • 谢谢,我现在知道 pickle 会按照它们被腌制的顺序读取它们。
  • 对登陆这里希望将多个数据帧保存到一个泡菜中的人的提示。您可以与上述类似,但将所有数据帧保存到字典中:df_dicts = { } 然后df_dicts[0], df_dicts[1], df_dicts[2] = df1, df2, df3。倾倒时,只需使用df_dicts
  • 应该在with open..."wb" 后面跟f.close()
  • @Dan with 为您处理好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
相关资源
最近更新 更多