11.5. marshal —内部Pythonオブジェクトのシリアル化—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/marshal
移動先:案内検索

11.5。 元帥 —内部Pythonオブジェクトのシリアル化

このモジュールには、Python値をバイナリ形式で読み書きできる関数が含まれています。 形式はPythonに固有ですが、マシンアーキテクチャの問題とは無関係です(たとえば、PC上のファイルにPython値を書き込み、ファイルをSunに転送して、そこで読み取ることができます)。 フォーマットの詳細は意図的に文書化されていません。 Pythonのバージョン間で変更される可能性があります(ほとんど変更されませんが)。 1

これは一般的な「永続性」モジュールではありません。 RPC呼び出しによるPythonオブジェクトの一般的な永続性と転送については、モジュール pickle および shelve を参照してください。 marshal モジュールは、主に.pycファイルのPythonモジュールの「疑似コンパイル済み」コードの読み取りと書き込みをサポートするために存在します。 したがって、Pythonメンテナは、必要が生じた場合に、後方互換性のない方法でマーシャル形式を変更する権利を留保します。 Pythonオブジェクトをシリアル化および逆シリアル化する場合は、代わりに pickle モジュールを使用してください。パフォーマンスは同等で、バージョンの独立性が保証され、pickleはマーシャルよりも大幅に広い範囲のオブジェクトをサポートします。

警告

marshal モジュールは、誤ったデータや悪意を持って作成されたデータから保護することを目的としたものではありません。 信頼できない、または認証されていないソースから受信したデータをマーシャリングしないでください。


すべてのPythonオブジェクトタイプがサポートされているわけではありません。 一般に、このモジュールで読み書きできるのは、Pythonの特定の呼び出しから値が独立しているオブジェクトのみです。 次のタイプがサポートされています:ブール値、整数、長整数、浮動小数点数、複素数、文字列、Unicodeオブジェクト、タプル、リスト、セット、フリーズセット、辞書、およびコードオブジェクト。タプル、リスト、セットであることを理解する必要があります。 、frozensetsおよびdictionariesは、そこに含まれる値自体がサポートされている場合にのみサポートされます。 再帰的なリスト、セット、辞書は書かないでください(無限ループが発生します)。 シングルトン NoneEllipsis 、およびStopIterationは、マーシャリングおよびアンマーシャリングすることもできます。

警告

Cのlong intタイプが32ビットを超えるマシン(DEC Alphaなど)では、32ビットより長いプレーンなPython整数を作成できます。 このような整数がマーシャリングされ、Cのlong intタイプが32ビットしかないマシンで読み戻されると、代わりにPythonの長整数オブジェクトが返されます。 タイプは異なりますが、数値は同じです。 (この動作はPython2.2の新機能です。 以前のバージョンでは、値の最下位32ビットを除くすべてが失われ、警告メッセージが出力されていました。)


ファイルの読み取り/書き込みを行う関数と、文字列を操作する関数があります。

モジュールはこれらの機能を定義します:

marshal.dump(value, file[, version])

開いているファイルに値を書き込みます。 値はサポートされているタイプである必要があります。 ファイルは、sys.stdoutなどの開いているファイルオブジェクトであるか、 open()または os.popen()によって返される必要があります。 WindowsのTemporaryFileなどのラッパーではない可能性があります。 バイナリモード('wb'または'w+b')で開く必要があります。

値にサポートされていないタイプがある(またはあるオブジェクトが含まれている)場合、ValueError例外が発生しますが、ガベージデータもファイルに書き込まれます。 オブジェクトは load()によって正しく読み戻されません。

バージョン2.4の新機能: version 引数は、dumpが使用する必要のあるデータ形式を示します(以下を参照)。

marshal.load(file)

開いているファイルから1つの値を読み取り、それを返します。 有効な値が読み取られない場合(例: データのPythonバージョンに互換性のないマーシャル形式が異なるため)、EOFErrorValueError、またはTypeErrorを上げます。 ファイルは、バイナリモード('rb'または'r+b')で開かれたオープンファイルオブジェクトである必要があります。

ノート

サポートされていない型を含むオブジェクトが dump()でマーシャリングされた場合、 load()はマーシャリングできない型の代わりにNoneを使用します。

marshal.dumps(value[, version])

dump(value, file)によってファイルに書き込まれる文字列を返します。 値はサポートされているタイプである必要があります。 値にサポートされていない型がある(またはあるオブジェクトが含まれている)場合は、ValueError例外を発生させます。

バージョン2.4の新機能: version 引数は、dumpsが使用する必要のあるデータ形式を示します(以下を参照)。

marshal.loads(string)
文字列を値に変換します。 有効な値が見つからない場合は、EOFErrorValueError、またはTypeErrorを上げます。 文字列内の余分な文字は無視されます。

さらに、次の定数が定義されています。

marshal.version

モジュールが使用する形式を示します。 バージョン0は履歴形式であり、バージョン1(Python 2.4で追加)はインターン文字列を共有し、バージョン2(Python 2.5で追加)は浮動小数点数にバイナリ形式を使用します。 現在のバージョンは2です。

バージョン2.4の新機能。

脚注

1
このモジュールの名前は、Modula-3の設計者(とりわけ)が使用する用語に由来します。Modula-3は、自己完結型の形式でデータを転送するために「マーシャリング」という用語を使用します。 厳密に言えば、「マーシャリングする」とは、一部のデータを内部形式から外部形式(RPCバッファーなど)に変換し、逆のプロセスで「アンマーシャリング」することを意味します。