Entendiendo Python Pickling con ejemplo

Requisito previo: módulo de pepinillos

El módulo pickle de Python se utiliza para serializar y deserializar una estructura de objetos de Python. Cualquier objeto en Python se puede decapar para que se pueda guardar en el disco. Lo que hace pickle es que primero «serializa» el objeto antes de escribirlo en el archivo. El decapado es una forma de convertir un objeto de Python (lista, dictado, etc.) en un flujo de caracteres. La idea es que este flujo de caracteres contenga toda la información necesaria para reconstruir el objeto en otro script de Python.

# Python3 program to illustrate store 
# efficiently using pickle module 
# Module translates an in-memory Python object 
# into a serialized byte stream—a string of 
# bytes that can be written to any file-like object.
  
import pickle
  
def storeData():
    # initializing data to be stored in db
    Omkar = {'key' : 'Omkar', 'name' : 'Omkar Pathak',
    'age' : 21, 'pay' : 40000}
    Jagdish = {'key' : 'Jagdish', 'name' : 'Jagdish Pathak',
    'age' : 50, 'pay' : 50000}
  
    # database
    db = {}
    db['Omkar'] = Omkar
    db['Jagdish'] = Jagdish
      
    # Its important to use binary mode
    dbfile = open('examplePickle', 'ab')
      
    # source, destination
    pickle.dump(db, dbfile)                     
    dbfile.close()
  
def loadData():
    # for reading also binary mode is important
    dbfile = open('examplePickle', 'rb')     
    db = pickle.load(dbfile)
    for keys in db:
        print(keys, '=>', db[keys])
    dbfile.close()
  
if __name__ == '__main__':
    storeData()
    loadData()

Producción:

omkarpathak-Inspiron-3542:~/Documents/Python-Programs$ python P60_PickleModule.py
Omkar => {'age': 21,  'name': 'Omkar Pathak',  'key': 'Omkar',  'pay': 40000}
Jagdish => {'age': 50,  'name': 'Jagdish Pathak',  'key': 'Jagdish',  'pay': 50000}

Decapado sin lima

# initializing data to be stored in db
Omkar = {'key' : 'Omkar', 'name' : 'Omkar Pathak', 
'age' : 21, 'pay' : 40000}
Jagdish = {'key' : 'Jagdish', 'name' : 'Jagdish Pathak',
'age' : 50, 'pay' : 50000}
  
# database
db = {}
db['Omkar'] = Omkar
db['Jagdish'] = Jagdish
  
# For storing
b = pickle.dumps(db)       # type(b) gives <class 'bytes'>
  
# For loading
myEntry = pickle.loads(b)
print(myEntry)

Ventajas de usar el Módulo Pickle:

  1. Objetos recursivos (objetos que contienen referencias a sí mismos): Pickle realiza un seguimiento de los objetos que ya ha serializado, por lo que las referencias posteriores al mismo objeto no se serializarán nuevamente. (El módulo Marshal se rompe por esto).
  2. Uso compartido de objetos (referencias al mismo objeto en diferentes lugares): Esto es similar a los objetos autorreferenciados; pickle almacena el objeto una vez y se asegura de que todas las demás referencias apunten a la copia maestra. Los objetos compartidos permanecen compartidos, lo que puede ser muy importante para los objetos mutables.
  3. Clases definidas por el usuario y sus instancias: Marshal no las admite en absoluto, pero pickle puede guardar y restaurar instancias de clase de forma transparente. La definición de clase debe poder importarse y vivir en el mismo módulo que cuando se almacenó el objeto.

Este artículo es una contribución de Omkar Pathak . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *