web-dev-qa-db-ja.com

データを保存するための最良の方法

生徒の統計を追跡したいクラスを作成しました。このデータを操作するために、後でGUIを作成するつもりです。

私の主な質問は、このデータを保存して後で取得するための最良の方法は何ですか?

ピクルスとJSONについて読んだことがありますが、それらがどのように機能するか(特に、どの形式でどこにデータを保存するかなど)はわかりません。

11
Lennart Wijers

永続的なデータ(学生に関する情報の保存)には、データベースが適しています。すでに述べたように、PythonにはSqlite3が付属していますが、少なくとも開発目的には十分な場合があります。

SqliteをPythonに導入するのは簡単です。ライブラリをソースコードファイルにインポートして、データベースへの接続を開くだけです。 python ドキュメント を参照してください。

[〜#〜]編集[〜#〜]:見つかりました 新しいチュートリアル 約Python +良さそうなSqlite。

9
Sami N

文字列や数値のコレクションのコレクションのように、データが非常に単純な場合は、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を選択することをお勧めします。ピクルスについて知っておくべき非常に重要なことの1つは、ピクルスにはセキュリティの脆弱性があるということです。自分でピクルスにしないものをすべてアンピックするのは悪い考えです。 pickleは、この記事で詳しく説明されているセキュリティ問題に対して脆弱です: http://www.kalzumeus.com/2013/01/31/what-the-Rails-security-issue-means-for -your-startup /

データのサイズが非常に大きい場合、データを頻繁に保存/ロードする場合、または何らかの理由でjsonを使用してローカルファイルに保存することが不十分な場合は、データベースが最適です。

13
Brenden Brown

データベースを使用します。 SQLightを使用したSQLAlchemyは良いスタートです。とにかく結局そこに行き着くでしょう。

または

ピクルスモジュールですべてを捨てます。 (実際には理解することは何もありません。オブジェクトを保存してから再度ロードします。これは非常に簡単です)。

2
Lennart Regebro

csvファイル モジュールを使用することもできます。それはあなたが必要とするものに依存します。

2
Arthur Julião

pickling 、Pythonのシリアル化メカニズムを使用できます。

Pickleモジュールは、a Pythonオブジェクト構造をシリアル化および逆シリアル化するための基本的で強力なアルゴリズムを実装します。「Pickling」は、a Pythonオブジェクト階層はバイトストリームに変換され、「unpickling」は逆の操作であり、バイトストリームはオブジェクト階層に変換されます。ピクルス(およびアンピクリング)は、「シリアル化」、「マーシャリング」[1]または「ただし、混乱を避けるために、ここで使用される用語は「ピクルス」と「アンピクリング」です。

1
Óscar López