Pythonのチュートリアル:永続的な方法の概要のピクルスとcPickleのデータのpython3組み込みモジュール
アウトライン
モジュールは、Pickle
バイナリシリアル化のPythonオブジェクトの構造化および非直列化を実装しています。これは、Pythonプログラムは、いくつかの文字列を実行し続けた場合に、停電へのデータの損失、メモリ内で実行されているのを防ぐために、ディスク上に格納された永続的なストレージを必要と辞書、クラスや他のデータオブジェクトとさえカスタムを示しています。pickleモジュールは、次いで便利になる、それは、送信又は格納することができる形式にオブジェクトを変換することができます。Pythonのpickleモジュールは、基本的なデータ系列とデシリアライズを実装しています。私たちは、ファイルから最後に保存したプログラム・オブジェクトを作成することができました、pickleモジュールによってデシリアライズ操作;我々は、オブジェクトのpickleモジュールのシリアライズ永続的なストレージにファイルにプログラム情報を実行して保存することができました。
JSONモジュールと比較すると
つまり、私たちは、pickleモジュールと一見似たを見ることができますが、それは本質的に異なります。
-
JSON形式はテキスト(それが時間のほとんどが続くが、Unicodeテキスト出力のシーケンスで
utf-8
、ピクルスは、バイナリシリアル化形式で符号化)。 -
JSONは(アナロジーは、base64での読みやすことができます)というよりも、漬物、読みやすいリテラルです。
-
JSONは、広く相互運用可能なPythonのシステム外で使用され、特定の漬物は、Pythonです。
シリアライズとデシリアライズ
使用して、読み取り、ターゲット方法で格納されたバイナリファイルを書き込むことによってdump
、データオブジェクトのシーケンスをload
データオブジェクトをデシリアライズ
D = {
'name': 'bob', 'major': { 'english', 'math' }, 'd': [1, 2, 3, 4, 5, 6, 7] } with open('D.pik', 'wb') as f: pickle.dump(D, f) with open('D.pik', 'rb') as f: D = pickle.load(f) print(type(D)) print(D)
サンプルの結果:
<class 'dict'>
{'name': 'bob', 'major': {'english', 'math'}, 'd': [1, 2, 3, 4, 5, 6, 7]}
もちろん、我々はまた、(文字列形式を保存)メモリにシリアライズすることができ、その後、処理対象は、どのような方法のようにネットワークを介して送信することができます
pik = pickle.dumps(D)
print(pik) D = pickle.loads(pik) print(type(D)) print(D)
サンプルの結果:
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00bobq\x02X\x05\x00\x00\x00majorq\x03cbuiltins\nset\nq\x04]q\x05(X\x07\x00\x00\x00englishq\x06X\x04\x00\x00\x00mathq\x07e\x85q\x08Rq\tX\x01\x00\x00\x00dq\n]q\x0b(K\x01K\x02K\x03K\x04K\x05K\x06K\x07eu.'
<class 'dict'>
{'name': 'bob', 'major': {'english', 'math'}, 'd': [1, 2, 3, 4, 5, 6, 7]}
cPickle
機能や漬物パッケージの使用はcPickleパッケージは、ほとんどのアプリケーションのパフォーマンスが向上し、使用することをお勧めします、はcPickleはC言語に基づいていることを除いて、(それは実際にはほとんど使用されていない差がある)とほぼ同じですモジュール。あなたははcPickleパッケージを使用したい場合は上記の例では、我々は代わりのステートメントをインポートすることができimport cPickle as pickle
ます。