Persistencia de datos de Python: módulo Marshal

Las características de serialización de objetos del módulo marshal en la biblioteca estándar de Python son similares al módulo pickle. Sin embargo, este módulo no se utiliza para datos de propósito general. Por otro lado, el propio Python lo utiliza para la serialización de objetos internos de Python para admitir operaciones de lectura / escritura en versiones compiladas de módulos de Python (archivos .pyc).

El formato de datos utilizado por el módulo marshal no es compatible con las versiones de Python. Por lo tanto, un script de Python compilado (archivo .pyc) de una versión probablemente no se ejecutará en otra.

Al igual que el módulo pickle, el módulo marshal también definió las funciones load () y dump () para leer y escribir objetos ordenados desde / hacia un archivo.

tugurio()

Esta función escribe la representación de bytes del objeto Python compatible en un archivo. El archivo en sí debe ser un archivo binario con permiso de escritura.

carga()

Esta función lee los datos de bytes de un archivo binario y los convierte en un objeto Python.

El siguiente ejemplo demuestra el uso de las funciones dump () y load () para manejar objetos de código de Python, que se utilizan para almacenar módulos de Python precompilados.

El código usa incorporado compile() función para construir un objeto de código a partir de una cadena fuente que incorpora instrucciones de Python.

compile(source, file, mode)

El parámetro de archivo debe ser el archivo desde el que se leyó el código. Si no se leyó de un archivo, pase cualquier cadena arbitraria.

El parámetro de modo es 'exec' si la fuente contiene una secuencia de declaraciones, 'eval' si hay una sola expresión o 'single' si contiene una sola declaración interactiva.

El objeto de código de compilación se almacena en un archivo .pyc utilizando la función 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()

Para deserializar, el objeto del archivo .pyc usa la función load (). Dado que devuelve un objeto de código, se puede ejecutar usando exec (), otra función incorporada.

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