python - 在 pickle 文件中保存和加载多个对象?

标签 python class object python-3.x pickle

我有一个类为游戏中的玩家服务,创建他们和其他东西。

我需要将这些播放器对象保存在一个文件中以供以后使用。我已经尝试过 pickle 模块,但我不知道如何保存多个对象并再次加载它们?有没有办法做到这一点,或者我应该使用其他类(如列表)并将我的对象保存和加载到列表中?

有没有更好的办法?

最佳答案

Tim Peters' accepted answer 的两个补充.

首先,如果在文件末尾停止加载,则无需单独存储 pickle 的项目数:

def loadall(filename):
    with open(filename, "rb") as f:
        while True:
            try:
                yield pickle.load(f)
            except EOFError:
                break

items = loadall(myfilename)

这假设文件只包含 pickle ;如果里面还有其他东西,生成器会尝试将里面的其他东西也视为 pickle ,这可能很危险。

第二,这样你得到的不是列表而是generator . 这一次只会将一项加载到内存中,这很有用 如果转储的数据非常大 - 您可能的一个可能原因 一开始就想分别 pickle 多个项目。 您仍然可以使用 for 循环遍历 items,就好像它是 一个列表。

关于python - 在 pickle 文件中保存和加载多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20716812/

相关文章:

python - Asyncio 两个循环用于不同的 I/O 任务?

Python - 如何将方法作为参数传递以从另一个库调用方法

python - 如何在 python 3.6 以下获得类似 Mock().assert_used_once 的行为?

javascript - 引用 ES.next 静态类属性的正确方法是什么?

用于在类中定义索引的python方法(使用 "[ ]")

java - java中私有(private)对象是如何传递的?

c++ - 修改临时对象

python - Sklearn StratifiedShuffleSplit 与 pandas

actionscript-3 - Flex 4 两个类在一个文件中

java - 扩展 JFrame - "super"关键字如何工作?