実例はpythonの中の序列化の知識点を説明します。

1972 ワード

プログラムの実行中、すべての変数はメモリにあります。たとえば、dictを定義します。

d = dict(name='Bob', age=20, score=88)
変数は随時変更できます。例えば、nameを「Bill」に変更しますが、プログラムが終了すると、変数が使っているメモリはオペレーティングシステムによって全部回収されます。修正されたビルをディスクに保存していない場合は、次にプログラムを実行します。変数はBobに初期化されます。
私たちは変数をメモリから記憶または転送できるようにする過程を序列化と呼び、Pythonではpicklingといい、他の言語ではserialization、masharlling、flanteningなども同じ意味です。
プログレッシブ化したら、プログレッシブされた内容をディスクに書き込むか、ネットワークを介して他のマシンに転送することができます。
逆に、変数の内容をプログレッシブの対象からメモリに読み返すことを逆プログレッシブと呼びます。つまりunpicklingです。
Pythonはpickleモジュールを提供して序文化を実現します。
まず、オブジェクトを順番に並べてファイルに書き込もうとします。

>>> import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'
pickle.dumps()メソッドは、任意のオブジェクトを1つのbytesに順序付けし、その後、このbytesをファイルに書き込むことができます。あるいは別の方法でpickle.dump()を直接に対象を並べてからfile-like Objectに書きます。

>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()
書き込んだdump.txtファイルを見てください。めちゃくちゃな内容です。これらは全部Pythonが保存している対象の内部情報です。
オブジェクトをディスクからメモリに読み出すときは、まず内容を一つのbytesに読んでから、pickle.loads()の方法でオブジェクトを順番に並べてもいいし、直接にpickle.load()の方法で一つのfile-like Objectから直接にオブジェクトを並べ替えることもできます。私たちは別のPythonコマンドラインを開いて、先ほど保存したオブジェクトを逆順序で並べ替えます。

>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}
変数の内容が戻ってきました。
もちろん、この変数は元の変数とは全く関係のないオブジェクトです。内容が同じだけです。
Pickleの問題は他のプログラミング言語特有の序列化問題と同じで、Pythonにしか使えないし、異なるバージョンのPythonは互いに互換性がないかもしれないので、Pickleで重要でないデータを保存するしかないです。
以上がこの文章で述べられたすべての内容です。この文章は主にpythonのプロローグに関する知識を紹介しています。資料を通して上記の内容を理解してほしいです。この文章で述べた内容があなたの役に立って、pythonの勉強がもっと楽になりますように。