加载所有腌制对象

Load all pickled objects

import pickle

ListNames = [["Name1","City1","Email1"],["Name2","City2","Number2"]]
ListNumbers = [1,2,3,4,5,6,7,8]

with open ("TestPickle.pickle","wb") as fileSaver:
    pickle.dump(ListNames,fileSaver)
    pickle.dump(ListNumbers,fileSaver)

with open ("TestPickle.pickle","rb") as fileOpener:
    print(pickle.load(fileOpener))

输出为:

[['Name1', 'City1', 'Email1'], ['Name2', 'City2', 'Number2']]

如何让 pickle 也加载 ListNumbers

我知道我可以再次打印 pickle.load 但是如果我的 pickle 文件中有未知数量的项目以及多种数据类型(例如:列表、元组、字典、字符串.... )

谢谢

I know I can just print pickle.load again but what if I have an unknown number of items in my pickle file with a number of Datatypes (e.g: lists, tuples, dictionaries, strings....)

有几种解决方法:

  1. 将所有项目打包到一个列表或元组中,然后对其进行 pickle 而不是单独 pickle。然后你可以在另一边打开包装。
  2. 首先选择一个描述项目数量的整数。然后告诉你多少次调用 pickle.load().
  3. 继续解酸洗,直到遇到 EOF。

以前没有尝试过像以前那样在 pickle 文件中放入多个东西,但很高兴看到它是可能的。查看 this 答案。如果你在没有 with 的情况下调用它两次,它应该把所有东西都拿出来:

f = open("TestPickle.pickle", "r")
ListNames = pickle.load(f)
ListNumbers = pickle.load(f)
f.close()

或者您可以像这样保留 with

with open("TestPickle.pickle", "rb") as f:
    ListNames,ListNumbers = pickle.load(f)

然后,

what if I have an unknown number of items in my pickle file with a number of Datatypes

将一些东西倒入 pickle 文件中,这样你就不知道里面是什么了,这真的是一个聪明的主意吗?

我不确定这是否是正确的方法。

import pickle

ListNames = [["Name1","City1","Email1"],["Name2","City2","Number2"]]
ListNumbers = [1,2,3,4,5,6,7,8]

with open ("TestPickle.pickle","wb") as fileSaver:
    pickle.dump(ListNames,fileSaver)
    pickle.dump(ListNumbers,fileSaver)
obj = []
with open("TestPickle.pickle","rb") as fileOpener:
    while True:
        try:
            obj.append(pickle.load(fileOpener))
        except EOFError:
            break
print obj

输出:

[[['Name1', 'City1', 'Email1'], ['Name2', 'City2', 'Number2']], [1, 2, 3, 4, 5, 6, 7, 8]]