加载所有酸洗对象

2024-09-28 21:52:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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))

输出为:

^{pr2}$

如何让pickle也加载列表编号

我知道我可以打印酸洗。装载同样,如果pickle文件中有未知数量的项,其中包含许多数据类型(例如:列表、元组、字典、字符串等等),该怎么办

谢谢


Tags: import列表aswithopendumppicklename1
3条回答

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. 把所有的东西都打包成一个单子或元组,然后腌制而不是单独腌制。然后你可以在另一边打开。在
  2. 先Pickle一个描述项目数的整数。然后告诉您调用pickle.load()的次数。在
  3. 在你撞到EOF之前,就别抓了。在

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

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

输出:

^{pr2}$

以前没有尝试过在pickle文件中放入一个以上的东西,但是很高兴看到这是可能的。看this答案。如果您调用它两次而不使用with,它应该会将所有内容都输出:

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

或者您可以这样保留with

^{pr2}$

然后

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

把一些东西倒进泡菜文件里,这样你就不知道里面有什么了,真的是个聪明的主意吗?

相关问题 更多 >