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

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

marshal —内部Pythonオブジェクトのシリアル化


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

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

警告

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


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

ファイルの読み取り/書き込みを行う関数と、バイトのようなオブジェクトを操作する関数があります。

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

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

開いているファイルに値を書き込みます。 値はサポートされているタイプである必要があります。 ファイルは書き込み可能なバイナリファイルである必要があります。

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

version 引数は、dumpが使用する必要のあるデータ形式を示します(以下を参照)。

marshal.load(file)

開いているファイルから1つの値を読み取り、それを返します。 有効な値が読み取られない場合(例: データのPythonバージョンに互換性のないマーシャル形式が異なるため)、 EOFErrorValueError 、または TypeError を発生させます。 ファイルは読み取り可能なバイナリファイルである必要があります。

ノート

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

marshal.dumps(value[, version])

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

version 引数は、dumpsが使用する必要のあるデータ形式を示します(以下を参照)。

marshal.loads(bytes)
バイトのようなオブジェクトを値に変換します。 有効な値が見つからない場合は、 EOFErrorValueError 、または TypeError を発生させます。 入力の余分なバイトは無視されます。

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

marshal.version
モジュールが使用する形式を示します。 バージョン0は履歴形式であり、バージョン1はインターン文字列を共有し、バージョン2は浮動小数点数にバイナリ形式を使用します。 バージョン3では、オブジェクトのインスタンス化と再帰のサポートが追加されています。 現在のバージョンは4です。

脚注

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