5

比較的新しいプログラマーとして、コードに書き込むよりも、外部ソースからプログラムデータを読み取ってアセンブルする方が有益な状況に何度か遭遇しました。これは主に、同じタイプのオブジェクトが多数ある場合に当てはまります。このようなシナリオでは、オブジェクト定義はコード内ですぐに多くのスペースを占有し、読みやすさに不必要な障害を追加します。

例として、私はテキストベースのRPGに取り組んできました。これには、追跡する部屋とアイテムが多数あります。いくつかのアイテムと部屋でさえ、オブジェクト作成コードの大規模なブロックにつながります。

この場合、ファイルから読み取る何らかの形式の外部データストレージを使用する方が簡単だと思います。このようなファイルでは、アイテムと部屋は名前と属性で保存されるため、比較的簡単にオブジェクトに解析できます。

これにはどのフォーマットが最適ですか?SQLのような本格的なデータベースは、かなり軽いスクリプトに不要な肥大化を加えると思います。一方、このデータを編集する簡単な方法は、外部アプリケーションまたは別のPythonスクリプトを使用して重要です。軽い話ですが、私が最もよく言及するのはXML、JSON、YAMLです。

私が見たところ、XMLは複雑で効果的に操作するのが難しいと多くの人が感じているため、XMLは最良の選択肢ではないようです。

JSONとYAMLはどちらも機能するように見えますが、どちらかを外部で編集するのがどれほど簡単かはわかりません。この場合、速度は主要な関心事ではありません。もちろん、より高速な実装が望ましいですが、それは私が使用できるものを制限する要因ではありません。

私はこことGoogleの両方を見て回りましたが、このトピックについてはかなり見てきましたが、特に役立つものは見つかりませんでした。これにはJSONやYAMLのような形式で十分ですか、それとも本格的なデータベースを使用したほうがよいでしょうか?

4

8 に答える 8

5

ここにはすでに良い答えがありますが、あなたが新しいプログラマーであるため、ネイティブのPythonデータ型への最も直接的なマッピングがあるため、JSONを読んで翻訳するのが最も簡単であるという唯一の理由で、JSONをお勧めします。 (リスト[]と辞書{})。可読性は大いに役立ち、Python プログラミングの信条の 1 つです。

于 2012-06-21T00:20:43.263 に答える
4

私はPython Picklesを使ってデータをファイルに保存するのが大好きです。

Pickle は、あらゆる種類の Python オブジェクト、特に「複雑な」オブジェクト (あらゆる種類の Python クラス、関数、あらゆる種類のオブジェクト) を適切にシリアル化できます!

JSON などのデータ形式で使用できる「リスト」、「辞書」、「文字列」、「数値」などの比較的単純な構造に限定されません。

于 2012-06-21T00:36:46.100 に答える
3

それはあなたのユースケースに依存します。

ファイルが比較的小さく、ほとんど静的である場合は、YAML または JSON のいずれかが目的を果たします。YAML と JSON の違いは何ですか? を確認してください。詳細については、どちらを優先するか

ファイルが巨大または動的である場合、または何らかの同時実行制御が関係する場合は、データベースに処理させたほうがよいでしょう。

于 2012-06-21T00:15:06.563 に答える
2

いくつかのアプリケーションで同様のニーズがあり、jsonpickle を使用して JSON に落ち着きました。

json 出力を人間が読みやすく編集できるようにするために、次の書式設定を使用します。

jsonpickle.set_encoder_options('simplejson', sort_keys=True, indent=4)

次に、データをエンコード/デコードします。

text = jsonpickle.encode(data)
...
data = jsonpickle.decode(text)

jsonpickle の優れた点は、(プレーンな JSON を使用した場合のように) すべてを手動で dict に変換する必要なく、クラス オブジェクトを格納できることです。jsonpickle には、変換方法をさらに制御する必要がある場合に、独自のコンバーターを定義できるフックも含まれています。

リレーショナル データベースはもちろん、特に大規模なマルチプレイヤー ゲームの場合にその役割を果たします。多くのゲーム ロジックで、膨大な数のオブジェクトに対する頻繁な小さな更新が必要な場合は、データベース アプローチが有利です。

[更新] もう 1 つ注意してください。json ファイルを何度も手動で編集する場合は、編集したファイルに対して実行できる小さな json-checker スクリプトを作成して、構文エラーを見つけてください。かなりの節約になります。時間の。

于 2012-06-21T01:10:30.940 に答える
1

編集可能性が必要な場合は、必要な区切り文字 <> または {} がないため、名前を付けたものの中で YAML が最適なオプションです。

于 2012-06-21T00:01:31.023 に答える
1

XML、JSON、または YAML は、リレーショナル データベースが提供するものよりも「緩い」形式です。リレーショナル データベースはテーブル指向であり、データの保存方法にいくつかの制約があります。

あなたの説明から、私は JSON または YAML に固執します。それらを使用すると、かなり複雑なオブジェクト グラフを表現できます (より「形式的な」型付けまたはスキーマが必要な場合は、XML を選択できます)。

読み取りまたは書き込み操作では、通常、オブジェクトへの/からのシリアル化/逆シリアル化を検討します ( http://docs.python.org/library/json.htmlのように)。

于 2012-06-21T00:14:33.383 に答える
0

注釈付きのグラフビズ (DOT 形式) を出力できる GUI について少し調べてみたいと思います。これにより、ルームとそれらの間のリンク (一種のグラフ) を作成できます。その後、より多くの情報をサポートする別の形式が必要になる場合があります。

ただし、マップ、部屋間のリンク (アイテムやトラップなどを含む) を簡単に作成できるようにする必要があり、共通ライブラリを使用して png などでマップのグラフィックスを生成できます。

頭のてっぺんからのランダムなアイデア - 無視してかまいません!

于 2012-06-21T00:37:02.833 に答える