Python-data-persistence-marshal-module

提供:Dev Guides
移動先:案内検索

Pythonデータの永続性-マーシャルモジュール

Pythonの標準ライブラリのマーシャルモジュールのオブジェクトシリアル化機能は、ピクルモジュールに似ています。 ただし、このモジュールは汎用データには使用されません。 一方、Python自体がPythonの内部オブジェクトのシリアル化に使用して、コンパイルされたバージョンのPythonモジュール(.pycファイル)での読み取り/書き込み操作をサポートします。

marshalモジュールが使用するデータ形式は、Pythonバージョン間で互換性がありません。 したがって、あるバージョンのコンパイル済みPythonスクリプト(.pycファイル)は、おそらく別のバージョンでは実行されません。

ピクルモジュールと同様に、マーシャルモジュールは、マーシャルされたオブジェクトを/からファイルに読み書きするためのload()およびdump()関数も定義しました。

投げ捨てる()

この関数は、サポートされているPythonオブジェクトのバイト表現をファイルに書き込みます。 ファイル自体が書き込み権限のあるバイナリファイルである

負荷()

この関数は、バイナリファイルからバイトデータを読み取り、それをPythonオブジェクトに変換します。

次の例は、dump()関数とload()関数を使用して、プリコンパイルされたPythonモジュールを格納するために使用されるPythonのコードオブジェクトを処理する方法を示しています。

コードは組み込みの* compile()*関数を使用して、Python命令を埋め込むソース文字列からコードオブジェクトを構築します。

compile(source, file, mode)

fileパラメータは、コードの読み取り元のファイルである必要があります。 ファイルから読み取られなかった場合は、任意の文字列を渡します。

モードパラメータは、ソースに一連のステートメントが含まれている場合は「exec」、単一の式がある場合は「eval」、単一のインタラクティブステートメントが含まれている場合は「single」です。

コンパイルコードオブジェクトは、dump()関数を使用して.pycファイルに格納されます。

import marshal
script = """
a=10
b=20
print ('addition=',a+b)
"""
code = compile(script, "script", "exec")
f=open("a.pyc","wb")
marshal.dump(code, f)
f.close()

逆シリアル化するには、.pycファイルのオブジェクトでload()関数を使用します。 コードオブジェクトを返すため、別の組み込み関数であるexec()を使用して実行できます。

import marshal
f=open("a.pyc","rb")
data=marshal.load(f)
exec (data)