logo

例を使って Python のピクルスを理解する

Python では、後で使用するためにオブジェクトをディスクに保存する必要がある場合があります。これは、Python pickle を使用して実行できます。この記事では、いくつかの例とともに Python のピクルスについて学びます。

Python Pickle — Python オブジェクトのシリアル化

パイソン ピクルスモジュール Python オブジェクト構造のシリアル化と逆シリアル化に使用されます。 Python の任意のオブジェクトをピクル化してディスクに保存できます。 Pickle が行うことは、オブジェクトをファイルに書き込む前に、まずオブジェクトをシリアル化することです。ピクルスは、Python オブジェクト (リスト、辞書など) を文字ストリームに変換する方法です。この文字ストリームには、別の文字ストリームでオブジェクトを再構築するために必要なすべての情報が含まれているという考え方です。 パイソン 脚本。これは、任意の Python オブジェクトをバイト ストリームに変換する機能を提供します。このバイト ストリームにはオブジェクトに関するすべての重要な情報が含まれているため、任意の Python でオブジェクトを再構築またはアンピクルして元の形式に戻すことができます。



パイソン漬け-(1)

連載の取り組み

Python のピクルの例

ヤスリを使わずに酸洗いする

この例では、辞書データをシリアル化してバイト ストリームに格納します。次に、このデータは次を使用して逆シリアル化されます。 pickle.loads() 関数を元の Python オブジェクトに戻します。

Python3



スプリングブーツ






import> pickle> # initializing data to be stored in db> Omkar>=> {>'key'> :>'Omkar'>,>'name'> :>'Omkar Pathak'>,> 'age'> :>21>,>'pay'> :>40000>}> Jagdish>=> {>'key'> :>'Jagdish'>,>'name'> :>'Jagdish Pathak'>,> 'age'> :>50>,>'pay'> :>50000>}> # database> db>=> {}> db[>'Omkar'>]>=> Omkar> db[>'Jagdish'>]>=> Jagdish> # For storing> # type(b) gives ;> b>=> pickle.dumps(db)> # For loading> myEntry>=> pickle.loads(b)> print>(myEntry)>

Javaに含まれる文字列

>

>

出力:

文字列関数Java
{'Omkar': {'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000},  'Jagdish': {'key': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}}>

ヤスリで酸洗いする

この例では、最初に pickle.dump() 関数を使用して pickle ファイルにデータを書き込みます。次に、 pickle.load() 関数を使用して、Python スクリプトに pickle をロードし、そのデータを Python 辞書の形式で出力します。

Python3




# Python3 program to illustrate store> # efficiently using pickle module> # Module translates an in-memory Python object> # into a serialized byte stream—a string of> # bytes that can be written to any file-like object.> import> pickle> def> storeData():> ># initializing data to be stored in db> >Omkar>=> {>'key'> :>'Omkar'>,>'name'> :>'Omkar Pathak'>,> >'age'> :>21>,>'pay'> :>40000>}> >Jagdish>=> {>'key'> :>'Jagdish'>,>'name'> :>'Jagdish Pathak'>,> >'age'> :>50>,>'pay'> :>50000>}> ># database> >db>=> {}> >db[>'Omkar'>]>=> Omkar> >db[>'Jagdish'>]>=> Jagdish> > ># Its important to use binary mode> >dbfile>=> open>(>'examplePickle'>,>'ab'>)> > ># source, destination> >pickle.dump(db, dbfile)> >dbfile.close()> def> loadData():> ># for reading also binary mode is important> >dbfile>=> open>(>'examplePickle'>,>'rb'>)> >db>=> pickle.load(dbfile)> >for> keys>in> db:> >print>(keys,>'=>'>, db[keys])> >dbfile.close()> if> __name__>=>=> '__main__'>:> >storeData()> >loadData()>

文字列連結Java

>

>

出力:

Omkar =>{'key'​​: 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000} ジャグディッシュ語 => {'key ': 'ジャグディッシュ', '名前': 'ジャグディッシュ・パタック', '年齢': 50, '給料': 50000}>

Python で Pickle を使用する利点

  1. 再帰的オブジェクト (オブジェクト自体への参照を含むオブジェクト): Pickle は、すでにシリアル化されたオブジェクトを追跡するため、同じオブジェクトへの後での参照が再びシリアル化されることはありません。 (これにより、マーシャル モジュールが壊れます。)
  2. オブジェクトの共有 (異なる場所にある同じオブジェクトへの参照): これは自己参照オブジェクトと似ています。 Pickle はオブジェクトを一度保存​​し、他のすべての参照がマスター コピーを指すようにします。共有オブジェクトは共有されたままになります。これは、変更可能なオブジェクトにとって非常に重要です。
  3. ユーザー定義クラスとそのインスタンス: Marshal はこれらをまったくサポートしていませんが、Pickle はクラス インスタンスを透過的に保存および復元できます。クラス定義はインポート可能であり、オブジェクトが保存されたときと同じモジュール内に存在する必要があります。

Python で Pickle を使用するデメリット

  1. Python バージョンの依存関係: picle のデータは、生成された Python のバージョンに非常に影響されます。 Python の 1 つのバージョンで作成された Pickled オブジェクトは、さまざまなバージョンでは unpickle できない可能性があります。
  2. 読み取り不可: pickle の形式はバイナリであり、人間が簡単に読み取りまたは編集することはできません。 JSON または XML 形式の契約は簡単に変更できます。
  3. 大規模データの非効率性: データセットが大きいと、pickle および unpickle の速度が遅くなる可能性があります。このようなユースケースにはシリアル化の方が適している可能性があります。

結論

Python Pickle はオブジェクトのシリアル化機能を提供しますが、特にさまざまな Python バージョン間で作業する場合や大規模なデータセットを扱う場合、開発者は制限を維持します。アプリケーションの特定のニーズを常に考慮して、シリアル化に ickle または JSON、XML などの代替手段が適しているかどうかを判断することが重要です。

連結Java文字列