2021年04月02日
【TIPS】python:pickle
pythonで変数をファイルに保存
pickle モジュールは、pythonオブジェクトの直列化(serialization)、および直列化されたオブジェクトの復元のためのバイナリプロトコルが実装されている。シリアル化
データ構造をネットワーク上で格納または転送できる直列形式に変換する方法です。pythonでは、シリアル化を使用することで、複雑なオブジェクト構造を取得し、ディスクに保存したり、ネットワーク経由で送信できるバイトストリームに変換できます。このプロセスはマーシャリングとも呼ばれています。逆のバイトのストリームを取得して、データ構造に変換する処理は、逆シリアル化もしくはアンマーシャリングと呼ばれます。
pickle可能タイプ
シリアル化のもっとも一般的な用途は、機械学習のトレーニングフェーズ後に、トレーニング状態を保存して、後でトレーニングをやり直すことなく使用できるようにすることです。
pythonでは、オブジェクトをシリアル化・逆シリアル化できる3つのモジュールが標準ライブラリとして用意されています。
- marshal:3つの中でもっとも古いモジュール。非推奨
- json:標準のjsonファイルを操作可能。人が読みやすく言語に依存しない。XMLよりも軽い。
- pickle:バイナリ形式でオブジェクトをシリアル化するため、人が読み取りできない。その一方で高速で様々なpythonで動作する。
jsonおよびXMLは、異なる言語との相互運用や人が読む必要がある場合に適した選択肢である。pickleは、pythonのみで利用する場合や人が読む必要のない場合に適した選択肢である。
pickleモジュール
4つのメソッドで構成されています。- pickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)
- pickle.dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None)
- pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)
- pickle.loads(data, /, *, fix_imports=True, encoding="ASCII", errors="strict", buffers=None)
pickle可能
すべてが漬け込み可能であるとは限りません。不可能なオブジェクトは、データベース接続やネットワークソケット、実行中のスレッドなどです。回避策としては、サードバーティ製のdillやcloudpickleライブラリを使用することで回避できる可能性があります。このモジュールは、関数の関数など多くの方をシリアル化できます。
pickleオブジェクトの圧縮
データ形式はオブジェクト構造のコンパクトなバイナリ表現ですが、bz2モジュールで圧縮することで、最適化できます。セキュリティ上の懸念
アンピックプロセスで任意のコードを実行することができます。このリスクを軽減するために何が出来るでしょうか??完璧な回避策はありません。経験則として、信頼されていないソースから来たデータや安全でないネットワークを介して送信されるデータを利用しないことです。中間者の攻撃を防ぐために、データに署名して改ざんされていないことを確認するhmacライブラリをすることをお勧めします。
まとめ
pickleモジュールを利用することで、オブジェクトを保持することができるようになるでしょう。
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/10637907
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック