このモジュールには Python 値をバイナリ形式で読み書きできるような関数 が含まれています。このバイナリ形式は Python 特有のものですが、 マシンアーキテクチャ非依存のものです (つまり、Python の値を PC 上で ファイルに書き込み、Sun に転送し、そこで読み戻すことができます)。 バイナリ形式の詳細がドキュメントされていないのは故意によるもの です; この形式は (稀にしかないことですが) Python のバージョン間で 変更される可能性があるからです。3.12
このモジュールは汎用の ``永続化 (persistence)'' モジュールでは ありません。汎用的な永続化や、RPC 呼び出しを通じたPython オブジェクト の転送については、モジュール pickle および shelve を参照してください。marshal モジュールは主に、 ``擬似コンパイルされた (pseudo-compiled)'' コードの .pyc ファイル への読み書きをサポートするために存在します。従って、 Python のメンテナ は、必要が生じれば marshal 形式を後方互換性のないものに変更する権利を 有しています。Python オブジェクトを直列化および非直列化したい場合には、 pickle モジュールを使ってください。
全ての Python オブジェクト型がサポートされているわけではありません;
一般的には、どの起動中の Python 上に存在するかに依存しないオブジェクト
だけがこのモジュールで読み書きできます。以下の型:
None
、整数、長整数、浮動小数点数、文字列、Unicode オブジェクト、
タプル、リスト、辞書、タプルとして解釈されるコードオブジェクト、
がサポートされています。リストと辞書は含まれている要素もサポート
されている型であるもののみサポートされています; 再帰的なリストおよび
辞書は書き込んではなりません (無限ループを引き起こしてしまいます)。
補足説明: C 言語の long int
が (DEC Alpha のように)
32 ビットよりも長いビット長を持つ場合、32 ビットよりも長い Python
整数を作成することが可能です。そのような整数が整列化された後、
C 言語の long int
のビット長が 32 ビットしかないマシン上で
読み戻された場合、通常整数の代わりにPython 長整数が返されます。
型は異なりますが、数値は同じです。(この動作は Python 2.2 で新たに
追加されたものです。それ以前のバージョンでは、値のうち最小桁から 32
ビット以外の情報は失われ、警告メッセージが出力されます。)
文字列を操作する関数と同様に、ファイルの読み書きを行う関数が 提供されています。
このモジュールでは以下の関数を定義しています:
value, file) |
sys.stdout
か、
open() や posix.popen() が返すようなファイル
オブジェクトでなくてはなりません。またファイルはバイナリモード
('wb'
または 'w+b'
) で開かれていなければ
なりません。
値 (または値のオブジェクトに含まれるオブジェクト) がサポートされて いない型の場合、ValueError 例外が送出されます -- が、同時にごみのデータがファイルに書き込まれます。このオブジェクトは load() で適切に読み出されることはないはずです。
バージョン 2.4 で 新たに追加 された仕様:
dumps
で、データフォーマットを表すversion 引
数を利用するべきです。
file) |
'rb'
または 'r+b'
) で開かれたファイルオブジェクトでなければ
なりません.
警告:
サポートされない型を含むオブジェクトが dump() で
整列化されている場合、load() は整列化不能な値を None
で置き換えます。
value[, version]) |
dump(value, file)
でファイルに書き込まれるような
文字列を返します。値はサポートされている型でなければなりません。値が
サポートされていない型 (またはサポートされていない型のオブジェクト
を含むような) オブジェクトの場合、ValueError 例外が
送出されます。
バージョン 2.4 で 新たに追加 された仕様:
dumps
で、データフォーマットを表すversion 引
数を利用するべきです。
string) |
これに加えて、以下の定数が定義されています: