Ce module contient certaines fonctions qui peuvent lire et écrire des valeurs Python dans un format binaire. Ce format est propre à Python, mais est indépendant de considérations d'architecture de la machine (c'est-à-dire que vous pouvez écrire une valeur Python dans un fichier sur PC, transporter le fichier sur une machine Sun, et relire la valeur sur cette machine). Les détails de ce format ne sont volontairement pas documentés; ils peuvent changer selon les versions (bien que cela arrive rarement). 1
Ceci n'est pas un module général de ``persistence''. Pour la
persistence générale et le transfert d'objets Python via des appels
RPC, voyez les modules pickle et shelve.
Le module marshal existe surtout pour lire et écrire le code
``pseudo-compilé'' des modules Python contenus dans des fichiers
.pyc.
Tous les types d'objets Python ne sont pas supportés: en général, seuls
les objets dont la valeur est indépendante d'une invocation particulière
de Python peuvent être écrits et lus par ce module. Les types suivants sont
supportés: Attention: Sur les machines pour lesquelles le type Il existe des fonctions qui lisent et écrivent des fichiers aussi
bien que des fonctions qui opèrent sur des chaînes de caractères.
Le module définit les fonctions suivantes:
Si la valeur est d'un type non supporté (ou contient des valeurs d'un
type non supporté), une exception ValueError est déclenchée -
mais des données incohérentes seront tout de même écrites dans le fichier.
L'objet ne sera pas relu correctement par load().
Avertissement: Si un objet contenant un type non supporté a été
marshallé avec dump(), load() substitutera
None, entiers, entiers longs, nombres à virgule flottante,
chaînes de caractères, objets Unicode, tuples, listes, dictionnaires, et
objets code ; étant bien entendu que les tuples, listes et dictionnaires
ne sont supportés que si les valeurs qu'ils contiennent sont eux-mêmes
supportés; et les listes et dictionnaires récursifs ne doivent pas
être écrits (ils provoqueront des boucles infinies).
long intdu C a plus de 32 bits (comme l'Alpha de DEC) il est possible de créer des
entiers simples Python qui ont plus de 32 bits. Comme le module marshal
dans son état actuel utilise 32 bits pour transférer des entiers simples,
de telles values sont tronquées, sans rien signaler. Ceci a un effet
particulier sur l'utilisation d'entiers littéraux très longs dans les
modules Python - ils seront acceptés par l'analyseur sur de telles machines,
mais seront tronqués sans rien dire quand le module est lu depuis le
fichier .pyc.
2dump(valeur, fichier)
sys.stdout ou le résultat d'un open() ou d'un
posix.popen(). Il doit être ouvert en mode binaire
('wb' ou 'w+b').
load(fichier)
'rb' ou 'r+b').
None au type non marshallable.
dumps(valeur)
dump(valeur, fichier). La valeur doit être d'un type
supporté. Déclenche une exception ValueError si la valeur
est d'un type non supporté, ou contient au moins un objet d'un type non
supporté.
loads(chaine)
Notes