加载所有腌制对象
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....)
有几种解决方法:
- 将所有项目打包到一个列表或元组中,然后对其进行 pickle 而不是单独 pickle。然后你可以在另一边打开包装。
- 首先选择一个描述项目数量的整数。然后告诉你多少次调用
pickle.load()
.
- 继续解酸洗,直到遇到 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]]
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....)
有几种解决方法:
- 将所有项目打包到一个列表或元组中,然后对其进行 pickle 而不是单独 pickle。然后你可以在另一边打开包装。
- 首先选择一个描述项目数量的整数。然后告诉你多少次调用
pickle.load()
. - 继续解酸洗,直到遇到 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]]