Python Data Persistence - Marshal Module
Os recursos de serialização de objeto do módulo marshal na biblioteca padrão do Python são semelhantes ao módulo pickle. No entanto, este módulo não é usado para dados de uso geral. Por outro lado, ele é usado pelo próprio Python para serialização de objetos internos do Python para suportar operações de leitura / gravação em versões compiladas de módulos Python (arquivos .pyc).
O formato de dados usado pelo módulo marshal não é compatível com as versões do Python. Portanto, um script Python compilado (arquivo .pyc) de uma versão provavelmente não será executado em outra.
Assim como o módulo pickle, o módulo marshal também definiu as funções load () e dump () para ler e gravar objetos empacotados de / para o arquivo.
despejar ()
Esta função grava a representação de bytes do objeto Python com suporte em um arquivo. O próprio arquivo é um arquivo binário com permissão de gravação
carga()
Esta função lê os dados de byte de um arquivo binário e os converte em um objeto Python.
O exemplo a seguir demonstra o uso das funções dump () e load () para manipular objetos de código do Python, que são usados para armazenar módulos Python pré-compilados.
O código usa compile() função para construir um objeto de código a partir de uma string de origem que incorpora instruções Python.
compile(source, file, mode)
O parâmetro do arquivo deve ser o arquivo do qual o código foi lido. Se não foi lido de um arquivo, passe qualquer string arbitrária.
O parâmetro de modo é 'exec' se a origem contém uma sequência de instruções, 'eval' se há uma única expressão ou 'único' se contém uma única instrução interativa.
O objeto de código de compilação é então armazenado em um arquivo .pyc usando a função 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 desserializar, o objeto do arquivo .pyc usa a função load (). Como ele retorna um objeto de código, ele pode ser executado usando exec (), outra função interna.
import marshal
f=open("a.pyc","rb")
data=marshal.load(f)
exec (data)