Persistance des données Python - Module Marshal

Les fonctionnalités de sérialisation d'objets du module marshal dans la bibliothèque standard de Python sont similaires au module pickle. Cependant, ce module n'est pas utilisé pour les données à usage général. D'autre part, il est utilisé par Python lui-même pour la sérialisation d'objets internes de Python afin de prendre en charge les opérations de lecture / écriture sur les versions compilées des modules Python (fichiers .pyc).

Le format de données utilisé par le module marshal n'est pas compatible entre les versions de Python. Par conséquent, un script Python compilé (fichier .pyc) d'une version ne s'exécutera probablement pas sur une autre.

Tout comme le module pickle, le module marshal a également défini les fonctions load () et dump () pour lire et écrire des objets rassemblés depuis / vers un fichier.

déverser()

Cette fonction écrit une représentation octet de l'objet Python pris en charge dans un fichier. Le fichier lui-même est un fichier binaire avec autorisation d'écriture

charge()

Cette fonction lit les données d'octets d'un fichier binaire et les convertit en objet Python.

L'exemple suivant montre l'utilisation des fonctions dump () et load () pour gérer les objets code de Python, qui sont utilisés pour stocker des modules Python précompilés.

Le code utilise des compile() pour créer un objet de code à partir d'une chaîne source qui incorpore des instructions Python.

compile(source, file, mode)

Le paramètre de fichier doit être le fichier à partir duquel le code a été lu. S'il n'a pas été lu à partir d'un fichier, passez une chaîne arbitraire.

Le paramètre mode est 'exec' si la source contient une séquence d'instructions, 'eval' s'il y a une seule expression ou 'single' s'il contient une seule instruction interactive.

L'objet de code de compilation est ensuite stocké dans un fichier .pyc à l'aide de la fonction dump ().

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()

Pour désérialiser, l'objet du fichier .pyc utilise la fonction load (). Puisqu'il retourne un objet code, il peut être exécuté en utilisant exec (), une autre fonction intégrée.

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