3.16 marshal -- Serialización alternativa de objetos Python

Este módulo contiene funciones que pueden leer y escribir valores de Python en formato binario. El formato es específico de Python, pero independiente de aspectos de la arquitecture de la máquina (es decir, se puede escribir un valor en un PC, transportar el fichero a una Sun y leerlo en ella). Los detalles del formato están sin documentar a propósito; puede cambiar entre versiones de Python (aunque no es usual)3.1.

Éste no es un módulo genérico de persistencia. Si se desea persistencia y transferencia de objetos de Python mediante llamadas a RPC, se debe consultar los módulos pickle y shelve. El módulo marshal existe sobre todo para dar soporte a la escritura y lectura del código ``pseudo-compilado'' de los módulos Python de los ficheros .pyc.

No todos los tipos de objetos de Python están soportados. En general, sólo los objetos cuyo valor es independiente de una invocación particular a Python pueden ser escritos y leídos por este módulo. Los siguientes tipos tienen soporte: None, enteros, enteros largos, números en coma flotante, cadenas, objetos Unicode, tuplas, listas, diccionarios, y objetos código, entendiéndose que las tuplas, listas y diccionarios tienen soporte siempre que los valores contenidos en ellos tengan soporte a su vez. Las listas y diccionarios recursivos no se deben utilizar (causan bucles inifinitos).

Ojo: En las máquinas en que el tipo long int de C tiene más de 32 bits (como la DEC Alpha), es posible crear enteros normales de Python de más de 32 bits. Como el módulo marshal actual utiliza 32 bits para transferir enteros de Python normales, dicos valores se truncan sin aviso. Esto afecta particularmente al uso de literales enteros muy grandes dentro del código fuente, que serán aceptados por el analizador sintáctico, pero se recortarán sin previo aviso al leerlos del .pyc3.2.

Hay funciones que leen/escrie ficheros, además de funciones que tratan cadenas.

El módulo define las siguientes funciones:

dump (value, file)
Escribe el valor value en el fichero abierto file. El valor debe ser de un tipo con soporte. El fichero debe ser un objeto fichero abierto, como sys.stdout o los devueltos por open() o posix.popen(). Debe estar abierto en modo binario ('wb' o 'w+b').

Si el valor (o un valor contenido en él) es de un tipo no soportado, se lanza una excepción ValueError. Además, se escribirá basura en el fichero. El objeto no se recuperará correctamente con load().

load (file)
Lee un valor del fichero abierto file y lo devuelve. Si no se lee un valor válido, lanza EOFError, ValueError o TypeError. El fichero debe ser un objeto abierto en modo binario ('rb' o 'r+b').

Advertencia: Si se escribiio un objeto de un tipo no soportado con dump(), load() lo sustituirá por None.

dumps (value)
Devuelve la cadena que escribiría en el fichero la función dump(value, file). El valor debe ser de un tipo soportado. Lanza la excepción ValueError si el valor (o uno de los valores contenidos en él) tiene un tipo no soportado.

loads (string)
Convierte la cadena a un valor. Si no se encuentra un valor válido, lanza EOFError, ValueError o TypeError. Los caracteres sobrantes de la cadena son ignorados.


Footnotes

... usual)3.1
El nombre del módulo parte de terminología utilizada por los diseñadores de Modula-3 (entre otros), quienes utilizan el témino ``marshalling'' para el envío de datos en forma autocontenida. Estrictamente, ``marshal'' significa convertir datos de un formato interno a otro externo (en un buffer de RPC, por ejemplo) y ``unmarshalling'' es el proceso inverso.
....pyc3.2
Una posible solución sería rechazar dichos literales en el analizador, ya que son no-portátiles. Otra solución sería permitir que el módulo marshal lanzara una excepción si fuera a truncarse un valor. En futuras versiones, se implementará alguna de estas soluciones.

Ver Sobre este documento... para obtener información sobre sugerencias.