1. ホーム
  2. python

[解決済み] pickleファイルに複数のオブジェクトを保存・読み込みできますか?

2023-05-03 06:42:23

質問

ゲーム内でプレイヤーにサービスを提供し、プレイヤーを作成したりするクラスがあります。

私は後でそれを使用するために、これらのプレーヤーオブジェクトをファイルに保存する必要があります。 pickle モジュールを試しましたが、複数のオブジェクトを保存して、再度読み込む方法がわかりません。そのような方法はありますか、それともリストのような他のクラスを使用して、リストに私のオブジェクトを保存してロードするべきですか?

より良い方法はありますか?

どのように解決するのですか?

リスト、タプル、ディクトを使うのが圧倒的に一般的な方法です。

import pickle
PIK = "pickle.dat"

data = ["A", "b", "C", "d"]
with open(PIK, "wb") as f:
    pickle.dump(data, f)
with open(PIK, "rb") as f:
    print pickle.load(f)

これで印刷されます。

['A', 'b', 'C', 'd']

しかし、pickleファイル には任意の数のピクルスが含まれています。 以下は同じ出力を生成するコードです。 しかし、書くのも理解するのも難しくなっていることに注意してください。

with open(PIK, "wb") as f:
    pickle.dump(len(data), f)
    for value in data:
        pickle.dump(value, f)
data2 = []
with open(PIK, "rb") as f:
    for _ in range(pickle.load(f)):
        data2.append(pickle.load(f))
print data2

このようにすると、書き出したファイルにいくつのpickleがあるのかを知る責任が生じます。 上のコードでは、リストオブジェクトの数を最初にピクルス化することでそれを実現しています。