生徒の統計を追跡したいクラスを作成しました。このデータを操作するために、後で GUI を作成する予定です。
私の主な質問は、このデータを保存して後で取得する最良の方法は何ですか?
pickle と JSON について読んだことがありますが、それらがどのように機能するかはよくわかりません (特に、どの形式でどこにデータを保存するかなど)。
生徒の統計を追跡したいクラスを作成しました。このデータを操作するために、後で GUI を作成する予定です。
私の主な質問は、このデータを保存して後で取得する最良の方法は何ですか?
pickle と JSON について読んだことがありますが、それらがどのように機能するかはよくわかりません (特に、どの形式でどこにデータを保存するかなど)。
文字列や数値のコレクションのコレクションのように、データが非常に単純な場合は、json を使用します。JSON とは、単純なデータ型と単純なデータ型の組み合わせの文字列表現です。モジュールを使用しjson
てデータを文字列に変換したら、それを自分でファイルに書き込みます。
それは非常に簡単です:
>>> my_data = [range(5) for i in range(5)]
>>> my_data
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> import json
>>> json.dumps(my_data)
'[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]'
次に、その文字列をファイルに書き込みます。リロードする場合は、次のようにします。
>>> import json
>>> string_from_file
'[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]'
>>> my_saved_data = json.loads(string_from_file)
>>> my_saved_data
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
データがより複雑で、組み込みのコレクション オブジェクト以外のクラスが含まれる場合は、pickle を選択することをお勧めします。pickle について知っておくべき非常に重要なことの 1 つは、pickle にはセキュリティ上の脆弱性があるということです。http://www.kalzumeus.com/2013/01/31/what-the-rails-security-issue-means-for-your-startup/pickle
の記事で詳述されているセキュリティ問題に対して脆弱です。
データのサイズが非常に大きい場合、またはデータを頻繁に保存/ロードする場合、または何らかの理由で json を使用してローカル ファイルに保存することが不適切な場合は、データベースが最適です。
永続データ(学生に関する情報の保存)には、データベースが適しています。すでに述べたように、PythonにはSqlite3が付属しています。これは、少なくとも開発目的には十分な場合があります。
SqliteのPythonへの導入は簡単です。ライブラリをソースコードファイルにインポートして、データベースへの接続を開くだけです。Pythonのドキュメントを参照してください。
編集:Python+Sqliteに関する新しいチュートリアルを見つけました。
csvファイルモジュールを使用することもできます。それはあなたが必要とするものに依存します。
データベースを使用します。SQLight を使用した SQLAlchemy は良いスタートです。とにかく最後にはそこにたどり着きます。
また
pickle モジュールですべてをダンプします。(実際に理解することは何もありません。オブジェクトを保存してから再度ロードします。これは非常に簡単です)。