Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのpickleモジュールを具体例で徹底解説|シリアライズの基本と使い方

本記事では、Pythonにおけるさまざまなデータ型のピクル化(pickling)について解説します。ブール値(Boolean)、整数(int)、浮動小数点数(float)、複素数(complex)、文字列(str)、タプル、リスト、セット、そしてピクル化可能なオブジェクトを含む辞書などは、すべてpickleで保存できます。一方、ジェネレータ、ローカルクラス(内部関数内で定義されたクラス)、ラムダ関数などは、ピクル化できないオブジェクトに該当します。

ピクル化(Pickling)とは?

ピクル化とは、Pythonのオブジェクトや関連するデータ構造を「シリアライズ(直列化)」と「デシリアライズ(逆直列化)」する一連の処理のことを指します。「マーシャリング」や「フラット化」と呼ばれることもあります。

具体的には、メモリ上に存在するオブジェクトをバイト列の形式へ変換する処理です。これにより、オブジェクトの状態をディスク上に保存したり、ネットワーク経由で送信したりすることが可能になります。デシリアライズ(アンピクル化)を行えば、保存したバイト列から元のオブジェクトを復元できます。

利用時の制約

pickleモジュールにはいくつか注意点があります。まず、異なるプログラミング言語間でデータを共有したい場合には、pickleの使用は推奨されません。つまり、クロスプラットフォーム・クロス言語の互換性は保証されていません。JSONなど他の汎用的な形式の方が適しているケースもあります。

また、pickleはファイル操作なしで生データに対しても実行できますが、本記事ではシリアライズによって生データをバイナリファイルへ書き出す方法を中心に学びます。

コード例:データの保存と読み込み

以下の例では、辞書型のデータをpickleでバイナリファイルに保存し、その後読み込んで表示します。

# Python pickling
import pickle as pk

def learnData():
    # データベースに格納するデータ
    dict_1 = {'tutorial': 'point', 'Python': '3.x'}
    dict_2 = {'Data structure': 'dictionary', 'pickling': 'serialization'}
    # データベース(辞書)を作成
    db = {}
    db['1'] = dict_1
    db['2'] = dict_2
    # ファイルポインタを使い追記モード(ab)でバイナリファイルを開く
    fp = open('Newfile', 'ab')
    # dump(保存元オブジェクト, 保存先ファイル)
    pk.dump(db, fp)
    fp.close()

def displayData():
    # 読み取りモード(rb)でバイナリファイルを開く
    fp = open('Newfile', 'rb')
    db = pk.load(fp)
    # 保存されたデータを1件ずつ表示
    for i in db:
        print(i, '=>', db[i])
    fp.close()

if __name__ == '__main__':
    learnData()
    displayData()

実行結果

1 => {'tutorial': 'point', 'Python': '3.x'}
2 => {'Data structure': 'dictionary', 'pickling': 'serialization'}

主なメソッドのポイント

  • pk.dump(obj, file):オブジェクトを開いているファイルにシリアライズして書き込みます。
  • pk.load(file):ファイルから読み込み、デシリアライズして元のオブジェクトを復元します。
  • バイナリモード('ab''rb')でファイルを開く必要がある点に注意してください。テキストモードではエラーになります。

まとめ

本記事では、Python 3.x(およびそれ以前のバージョン)に組み込まれているpickleモジュールを使って、オブジェクトをシリアライズ(ピクル化)・デシリアライズ(アンピクル化)する方法を学びました。pickleを活用すれば、プログラムの状態やデータ構造を手軽にファイルへ永続化でき、次回の実行時に簡単に復元できます。ただし、言語間の互換性がない点や、信頼できないソースからのpickleデータを読み込むことのセキュリティリスクについても理解した上で使用しましょう。

  1. PythonのPygameで画像を表示する方法

    Pygameは、Pythonでゲームやマルチメディアアプリケーションを開発するための定番マルチメディアライブラリです。本記事では、pygameモジュールを使用して、画像のサイズ(高さ・幅)やウィンドウ内での表示位置を考慮しながら、画面に画像を描画する方法を解説します。 画像表示の基本的な流れ 以下のサンプルプログラムでは、まずpygameモジュールを初期化し、ウィンドウのサイズとキャプション(タイトルバーの文字列)を設定します。その後、画像ファイルを読み込み、表示する座標を指定します。screen.blit()関数が実際に画面へ画像を描画し、whileループがウィンドウを閉じる操作(QUITイ

  2. Pythonで学ぶロジスティック回帰:基礎から実装・結果の解釈まで徹底解説

    ロジスティック回帰とは ロジスティック回帰(Logistic Regression)は、二値の結果(合格/不合格、はい/いいえなど)を予測するための統計手法です。金融、医療、犯罪学をはじめとする社会科学など、幅広い分野で長年にわたり活用されている実績あるアプローチです。 本記事では、Pythonを使ってロジスティック回帰を実装する方法を解説します。なお、同じ処理はRなどの他の言語でも実装可能です。 必要なライブラリのインストール サンプルプログラムでは、以下のライブラリを使用します。 NumPy:数値配列や行列の定義に使用 Pandas:データの読み込み・操作・加工に使用 Statsmod