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

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


シリアル化は、オブジェクトを(ファイルまたはメモリバッファに)保存/保存できる形式に変換するプロセスであるため、後で逆シリアル化し、シリアル化された形式から元のコンテンツ/オブジェクトを復元できます。これらすべての操作を実行するには、Pythonのpickleモジュールを使用します。

酸洗いとは

Python pickleモジュールは、Pythonオブジェクト構造のシリアル化と逆シリアル化に使用されます。あらゆる種類のPythonオブジェクト(list、dictなど)をバイトストリーム(0と1)に変換するプロセスは、ピクルスまたはシリアル化またはフラット化またはマーシャリングと呼ばれます。 unpicklingと呼ばれるプロセスによって、バイトストリーム(pickle化によって生成された)をpythonオブジェクトに変換し直すことができます。

オブジェクトをピクルスにするために必要なのは-

  • 漬物をインポートする
  • dumps()関数を呼び出します
import pickle
class Vehicle:
   def __init__(self, number_of_doors, color):
      self.number_of_doors = number_of_doors
      self.color = color
class Car(Vehicle):
   def __init__(self, color):
      Vehicle.__init__(self, 5, color)
Maruti = Car('Red')
print(str.format('My Vehicle Maruti is {0} and has {1} doors', Maruti.color, Maruti.number_of_doors))
pickle_Maruti = pickle.dumps(Maruti)
print('Here is my pickled Vehicle: ')
print(pickle_Maruti)

出力

My Vehicle Maruti is Red and has 5 doors
Here is my pickled Vehicle:
b'\x80\x03c__main__\nCar\nq\x00)\x81q\x01}q\x02(X\x0f\x00\x00\x00number_of_doorsq\x03K\x05X\x05\x00\x00\x00colorq\x04X\x03\x00\x00\x00Redq\x05ub.'

上記の例では、Carクラスのインスタンスを作成し、それをピクルスにして、carインスタンスを単純なバイト配列に変換しました。車のインスタンスが選択されたら、それをバイナリファイルまたはdbフィールドに簡単に保存し、後で復元して、オブジェクト階層内のこのバイトの束を元に戻すことができます。

注:pickle化されたオブジェクトを使用してファイルを作成する場合は、dumps()メソッドの代わりにdump()メソッドを使用する必要があります。

ピクリング解除

これは逆(またはピクルス)操作であり、バイナリストリームを取得してオブジェクト階層に変換します。

ピクルス解除は、pickleモジュールのload()関数を使用して実行され、バイトストリームから完全なオブジェクト階層を返します。

以下は負荷です

import pickle
class Vehicle:
   def __init__(self, number_of_doors, color):
      self.number_of_doors = number_of_doors
      self.color = color
class Car(Vehicle):
   def __init__(self, color):
      Vehicle.__init__(self, 5, color)
Maruti = Car('Red')
print(str.format('My Vehicle Maruti is {0} and has {1} doors', Maruti.color, Maruti.number_of_doors))
pickle_Maruti = pickle.dumps(Maruti)
#Now, let's unpickle our car Maruti creating another instance, another car ... unpickle_Maruti
Hyundai = pickle.loads(pickle_Maruti)
#Set another color of our new instance
Hyundai.color = 'Black'
print(str.format("Hyundai is {0} ", Hyundai.color))
print(str.format("Maruti is {0} ", Maruti.color))

上記の例では、最初の車のオブジェクト(Maruti)をピクルスにし、次にそれを別の変数(Hyundai)にピクルス解除したので、ある意味で、Marutiを複製してHyundaiを作成したことがわかります。

出力

My Vehicle Maruti is Red and has 5 doors
Hyundai is Black
Maruti is Red

ピクルスとJSON

JSONはJavascriptObjectNotationの略で、データ交換用の軽量フォーマットであり、人間が読み取ることができます。ピクルスに対するJSONの大きな利点の1つは、標準化され、言語に依存しないことです。ピクルスよりもはるかに安全で高速です。

ピクルスのもう1つの代替手段は、cPickleです。これは、ピクルスに非常によく似ていますが、C言語で記述されており、1000倍高速です。 pickleとcPickleに同じファイルを使用できます。

import json
mylist = [2, 4, 5, "ab", "cd", "ef"]
print("Here is my list: ", mylist)
json_string = json.dumps(mylist )
print("Here is my json encoded object: ", json_string)
print ("Here is JSON back to a data structure: ",json.loads(json_string))

出力

Here is my list: [2, 4, 5, 'ab', 'cd', 'ef']
Here is my json encoded object: [2, 4, 5, "ab", "cd", "ef"]
Here is JSON back to a data structure: [2, 4, 5, 'ab', 'cd', 'ef']

上記のコードでは、最初にオブジェクト(マイリスト)を取得し、「dumps」メソッドを使用して文字列を返し、次にJSONをデータ構造にロードして、文字列を変換して次のように変換する「loads」メソッドを使用します。 JSONオブジェクトのデータ構造。


  1. Pythonオブジェクトの比較「is」と「==」

    この記事では、オブジェクトの比較について学習します。つまり、演算子と等式演算子の間です。 等式演算子は渡された引数の値を処理しますが、is演算子は引数として渡された2つのオブジェクトの参照を比較します。 等しい場合、引数の演算子の内容はそれらの参照を無視して比較されます。つまり、異なる場所に格納されている同じコンテンツは同一であると見なされますが、演算子の参照を使用する場合は最優先事項です。 次に、以下の実装の概念を観察しましょう- 例 list_1 = ['t','u','t','o','r'] list_

  2. PythonのTimeTupleとは何ですか?

    datetime.dateインスタンスのtimetuple()メソッドは、time.struct_time型のオブジェクトを返します。 struct_timeは名前付きタプルオブジェクトです(名前付きタプルオブジェクトには、インデックスまたは名前でアクセスできる属性があります)。 struct_timeオブジェクトには、日付フィールドと時刻フィールドの両方を表す属性と、夏時間がアクティブかどうかを示すフラグがあります。 timetuple()関数によって返される名前付きタプルでは、​​日付オブジェクトに従って年、月、日のフィールドが設定され、時間、分、秒に対応するフィールドはゼロに設定され