最近では、最適化された方法でファイル内をジャンプすることは、巨大なファイルを管理する高性能アプリケーションのタスクです。
ソフトウェア プロジェクトでは、実行時にファイル内のランダムな場所を読み書きする必要がありますか? アプローチ全体を変更することを検討する必要があると思います。
データが小さい場合は、適切なコンテナー形式 (たとえば、リストまたは dict) 内でメモリ内の実行時にデータを保持 / 変更 / 生成し、一度に (変更時またはプログラムの終了時のみ) 全体を書き込むことができます。単純なデータベースを見ることを検討できます。また、実行時にデータがディクショナリに格納される場合に理想的な形式となる、JSON などの優れたデータ交換形式もあります。
概念をより明確にするための例。既にデータが書き込まれていると考えてくださいgamedata.dat
:
[{"playtime": 25, "score": 13, "name": "rudolf"}, {"playtime": 300, "score": 1, "name": "peter"}]
これは utf-8 でエンコードされ、JSON 形式のデータです。Python ゲームの実行中にファイルを読み取ります。
with open("gamedata.dat") as f:
s = f.read().decode("utf-8")
データを Python 型に変換します。
gamedata = json.loads(s)
データを変更します (新しいユーザーを追加します):
user = {"name": "john", "score": 1337, "playtime": 1}
gamedata.append(user)
ジョンは本当に 1337 ゲーマーです。ただし、この時点で、ユーザーを削除したり、Rudolf のスコアを変更したり、Peter の名前を変更したりすることもできます。いずれにしても、変更後は、新しいデータをディスクに書き戻すことができます。
with open("gamedata.dat", "w") as f:
f.write(json.dumps(gamedata).encode("utf-8"))
ポイントは、実行時に適切なコンテナ タイプ内でデータを管理 (作成/変更/削除) することです。データをディスクに書き込むときは、ゲームの現在の状態を保存するためにデータ セット全体を書き込みます。