Módulos disponibles para Serialización y Deserialización en Python

Python proporciona tres módulos diferentes que nos permiten serializar y deserializar objetos:  

  1. Módulo Mariscal
  2. Módulo de salmuera
  3. Módulo JSON

1. Módulo Marshal: Es el módulo más antiguo de estos tres. Se utiliza principalmente para leer y escribir el código de bytes compilado de los módulos de Python. Incluso podemos usar marshal para serializar objetos de Python, pero no se recomienda su uso. Es utilizado principalmente por el intérprete y la documentación oficial advierte que los mantenedores de python pueden modificar el formato de manera incompatible con versiones anteriores.

Nota: Se recomienda nunca descomponer los datos recibidos de una fuente no confiable o no autenticada.  
 

Ejemplo : 

Python3

# importing the module
import marshal 
 
data = {'name': 'sunny','age': 34,'address': 'nasik'}
 
# dumps() return byte object stored in variable 'bytes'
bytes = marshal.dumps(data)   
print('After serialization : ', bytes)
 
# loads() convert byte object to value
new_data = marshal.loads(bytes)   
print('After deserialization : ', new_data)

 
 Producción:

Después de la serialización: b’\xfb\xda\x04name\xda\x05sunny\xda\x03age\xe9″\x00\x00\x00\xda\x07address\xda\x05nasik0′

Después de la deserialización: {‘name’: ‘sunny’, ‘age’: 34, ‘address’: ‘nasik’} 
 

2. Módulo Pickle: es otra forma de serializar y deserializar objetos de Python. Serializa el objeto de Python en un formato binario, por lo que no es legible por humanos. Es más rápido y también funciona con objetos personalizados. El módulo pickle de Python es una mejor opción para la serialización y deserialización de objetos de Python. Si no necesita un formato legible por humanos o si necesita serializar objetos personalizados, se recomienda utilizar el módulo pickle. 
  

Ejemplo:  

Python3

# importinig the module
import pickle
 
data = {'st_name': 'Sunny', 'st_id': '9607', 'st_add': 'Nasik'}
with open('data.pickle', 'wb') as f1 :        
   
    # converts object to byte stream(list, dict, etc.)
    pickle.dump(data, f1)      
    print('Pickling Completed...')
 
with open('data.pickle', 'rb') as f2 :
    print('Unpickling the data : ')
     
    # converts byte stream(generated through pickling)back into object
    data = pickle.load(f2)
    print(data)

 
 Producción:

Pickling Completed...
Unpickling the data : 
{'st_name': 'Sunny', 'st_id': '9607', 'st_add': 'Nasik'}

3. Módulo JSON: Es un módulo de nueva creación. Nos permite trabajar con archivos JSON estándar. JSON es un formato ampliamente utilizado para el intercambio de datos y es muy conveniente. Es legible por humanos e independiente del lenguaje, y es más ligero que XML. Usando el módulo JSON podemos serializar y deserializar varios tipos estándar de Python como bool, dict, int, float, list, string, tuple, none, etc. El módulo JSON y XML son una buena opción si queremos interoperabilidad entre diferentes lenguajes. 
  

Ejemplo: deserializar

Python3

# importing the module
import json  
 
# JSON string
students = '{"id":"9607", "name": "Sunny", "department":"Computer"}'
   
# convert string to Python dict
student_dict = json.loads(students)
print(student_dict)
   
print(student_dict['name'])
print('Deserialization Completed.')

 
 Producción:

{"id": "9607", "name": "Sunny", "department":"Computer"}
Sunny
Deserialization Completed.

Ejemplo: serialización

Python3

# importing the module
import json   
 
data = {
  "id": "877",
  "name": "Mayur",
  "department": "Comp"
}
    
# Serializing json 
json_object = json.dumps(data)
print(json_object)
print('Serialization Completed.')
Producción

{"id": "877", "name": "Mayur", "department": "Comp"}
Serialization Completed.

Producción:

{"id": "877", "name": "Mayur", "department": "Comp"}
Serialization Completed. 

Publicación traducida automáticamente

Artículo escrito por ronilpatil y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *