python - 如何在python中保存和恢复多个变量?

标签 python variables object

我需要将十几个对象保存到一个文件中,然后再将它们恢复。 我尝试使用 for 循环与 pickle 和 shelve,但它不能正常工作。

编辑。
我试图保存的所有对象都在同一个类中(我之前应该提到这一点),我没有意识到我可以像这样保存整个类:

import pickle
def saveLoad(opt):
    global calc
    if opt == "save":
        f = file(filename, 'wb')
        pickle.dump(calc, f, 2)
        f.close
        print 'data saved'
    elif opt == "load":
        f = file(filename, 'rb')
        calc = pickle.load(f)
    else:
        print 'Invalid saveLoad option'

最佳答案

如果您需要保存多个对象,您可以简单地将它们放在一个列表或元组中,例如:

import pickle

# obj0, obj1, obj2 are created here...

# Saving the objects:
with open('objs.pkl', 'w') as f:  # Python 3: open(..., 'wb')
    pickle.dump([obj0, obj1, obj2], f)

# Getting back the objects:
with open('objs.pkl') as f:  # Python 3: open(..., 'rb')
    obj0, obj1, obj2 = pickle.load(f)

如果你有很多数据,你可以通过将protocol=-1传递给dump()来减小文件大小; pickle 然后将使用最佳可用协议(protocol),而不是默认的历史(并且更向后兼容)协议(protocol)。在这种情况下,文件必须以二进制模式打开(分别为 wbrb)。

二进制模式也应该与 Python 3 一起使用,因为它的默认协议(protocol)产生二进制(即非文本)数据(写入模式 'wb' 和读取模式 'rb')。

关于python - 如何在python中保存和恢复多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6568007/

相关文章:

python - 将非唯一列表的虚拟对象创建到 Python 中的列中

c - 为什么函数参数的名称在调用时与声明时不同?

python - 类型错误 : "NoneType" object is unsubscriptable

php - ORM 类的对象无法使用 Idiorm 转换为字符串

javascript - 从索引 1 开始 lodash map

python - cv2.Canny() 是否执行高斯模糊?

python - 平铺 map 和 Sprite : am I doing it the right way?

python - 更多 Pyglet - 抑制鼠标运动事件?

javascript - 如何在 jQuery 事件映射中共享变量?

java - 为什么我的 switch block 中出现 "variable might not have been initialized"编译器错误?