Pickle を使用して Python でオブジェクトを保存およびロードする

Hafiz Muhammad Zohaib 2023年6月21日
Pickle を使用して Python でオブジェクトを保存およびロードする

この記事では、Python でオブジェクトを保存および再読み込みする方法を示します。 また、Python を使用した酸洗いと酸洗い解除についても理解します。 さらに、酸洗いの長所と短所を見ていきます。

酸洗いと解凍

オブジェクトのシリアル化は、オブジェクトの状態をハード ドライブに保存できるように、オブジェクトをビット形式に変換する方法です。 多くの言語がオブジェクトのシリアル化の方法を提供していますが、Python はそれらすべてにおいてより柔軟です。

Python では、オブジェクトのシリアル化はピッキングと呼ばれ、逆シリアル化はピッキング解除と呼ばれます。 Python では主にオブジェクトを使用します。 したがって、ほとんどすべてをシリアル化/非シリアル化できます。 ただし、注意が必要なのは避けられず、使用する前に酸洗いの目的を知っておく必要があります。

理論的な詳細に飛び込む前に、Pickle モジュールを使用して Python での酸洗のデモを行いましょう。

Python でのピクルス化

ピクルス化するには、まず pickle モジュールをインポートします。

import pickle

Python では、ほとんどすべてのオブジェクトをシリアライズできます。 デモンストレーションのためにディクショナリ オブジェクトを取り上げましょう。

bio_dict = {"name": "Zohaib", "age": 29, "profession": "Engineer"}

pickle には、オブジェクトをシリアライズするための .dump() 関数が含まれています。

with open("bio_dict.pickle", "wb") as file_name:
    pickle.dump(bio_dict, file_name)

上記のコードでは、ファイル bio_dict.pickle を書き込み権限 (つまり wb) で開き、.dump() 関数を使用して bio_dict 辞書を pickle ファイルにピクルしました。 その結果、辞書をバイトストリーム形式に変換することに成功しました。

Python での解凍

ピクルされたオブジェクトを再度使用する必要がある場合は、デシリアライズできます。 そのために、以下のコードで示されているように pickle.load() 関数を使用できます。

with open("bio_dict.pickle", "rb") as file_name:
    unpickled_dict = pickle.load(file_name)

print("The retrieved dictionary is: ", unpickled_dict)

以前に保存した (.pickle) ファイルを開き、.load() 関数を使用してオブジェクトを再度取得しました。 上記のコードは、次の出力を生成します。

The retrieved dictionary is:  {'name': 'Zohaib', 'age': 29, 'profession': 'Engineer'}

次のコードを使用して、ピクルされたオブジェクトとピクルされていないオブジェクトが等しいかどうかを確認できます。

assert bio_dict == unpickled_dict

ピクルスのメリットとデメリット

Python でのピクルの利点は次のとおりです。

  1. JSON やその他のシリアライズ手法とは異なり、ほとんどすべての Python オブジェクトを Python のこの pickle モジュールでシリアライズできます。

  2. 漬け物は後で使えます。 たとえば、大規模な計算を行い、オブジェクトをピクルしたとします。 次に、新しい Python セッションを開始するときに、以前に完了した大規模な計算を再度実行する必要はありません。

    代わりに、ピクルされたオブジェクトをアンピクルし、新しい計算で使用します。 このようにして、時間とリソースを節約できます。

  3. ピクルされたオブジェクトは、複数のスレッドによって効率的に読み取られるため、高速な並列計算が可能になります。

酸洗には複数の結果があります。 ピクルスを使用する前に、それらに注意する必要があります。

  1. 信頼できないソースから収集されたデータを unpickle すべきではありません。 重大なセキュリティ上の問題を引き起こす可能性のある変更されたデータまたは任意の脆弱なコードが含まれている可能性があります。
  2. JSON ファイルとは異なり、pickled ファイルは人間が判読できません。
  3. JSON ファイルは複数の言語で使用およびサポートできます。 一方、Python の pickle ファイルは多くの言語でサポートされていない可能性があり、アダプタとして機能する関連するサードパーティの中間ライブラリが必要になる場合があります。

他に漬けられるもの

説明するのに多くの時間を必要とする重要なポイントです。 しかし、要するに、関数、Pandas データ フレームなど、多くの Python のものをピクルすることができます。

Pickle は、モデルを保持し、時間のかかる再トレーニングを削減し、以前にトレーニングしたモデルを共有、コミット、およびリロードできるため、機械学習に非常に役立つツールでもあります。

この ガイド に従って、ピクルを使用して機械学習モデルを保存できます。

関連記事 - Python Pickle