Pythonでのオブジェクト保存

ある時点で、Pythonプログラマーはオブジェクトをパックして、より良い時まで非表示にする必要があります。 構成ファイルで言います。 または、ソケットを通過します。 どうやってやるの? もちろん、XMLコードを生成および解析する小さなクラスを作成できます(ちなみに、次の記事ではそれについて説明します)が、これは面倒です。

いや! 私たちの選択はピクルスです!

前文


Pickle(英語の保存、pickle)-後続の転送のためにPythonでオブジェクトをシリアライズおよびデシリアライズするためのモジュール。

どのタイプのデータをPickleパックできますか?ただし、細かい点が1つあります。 最初はこのモジュールの作業に非常に満足していますが、後で高負荷プロジェクトで使用すると、データの保存に時間がかかることに気付くようになります。 この問題は、同様のモジュールがPythonではなくCで記述されているという事実によって解決されました。これにより、パフォーマンスが数千倍になりました(開発者による)。 はい、Cで書かれたモジュールはPythonのモジュールよりも速く動作する場合がありますが、この記事では詳しく説明しません。

Pythonの作成者自身が公式ドキュメントでcPickleの使用を推奨しています。プログラムを長期間変更しないようにするには、次のようにcPickleを接続できます。

import cPickle as pickle

基本


オブジェクトの保存の使用方法 2つのオプションがあります。オブジェクトを文字列で保持するか(たとえば、ソケットを介して渡すことができます)、またはファイルに直接保存します。

3つの保存プロトコルがあります。行内のオブジェクトの保存:

import cPickle as pickle
obj = {"one": 123, "two": [1, 2, 3]}
output = pickle.dumps(obj, 2)


ご覧のとおり、複雑なことは何もありません。オブジェクトを送信する準備ができています。
今、あなたはそれを元に戻す必要があります。 これはさらに簡単です:

obj = pickle.loads(output)

キャニングプロトコルは自動的に決定されます。
オブジェクトをファイルにパックしてみましょう。

import cPickle as pickle
obj = {"one": 123, "two": [1, 2, 3]}
output = open('data.pkl', 'wb')
pickle.dump(obj, output, 2)
output.close()


ファイルへの書き込みモードはwbでなければならないことに注意してください。つまり、バイナリモードでファイルを上書きします。 読み取りの場合、モードはrbである必要があります。

import cPickle as pickle
input = open('data.pkl', 'rb')
obj = pickle.load(input)
input.close()


ご清聴ありがとうございました。 次回は、PythonでXMLデータを作成および解析する機能についてお話したいと思います。

Source: https://habr.com/ru/post/J44599/


All Articles