En Python, a veces necesitamos guardar el objeto en el disco para usarlo más adelante. Esto se puede hacer usando Python Pickle. En este artículo, aprenderemos sobre los pepinillos en Python junto con algunos ejemplos.
Python Pickle: serialización de objetos de Python
Pitón módulo de encurtidos se utiliza para serializar y deserializar una estructura de objetos de Python. Cualquier objeto en Python se puede seleccionar para poder guardarlo en el disco. Lo que hace Pickle es serializar el objeto primero antes de escribirlo en un archivo. El decapado es una forma de convertir un objeto Python (lista, diccionario, etc.) en una secuencia de caracteres. La idea es que este flujo de caracteres contenga toda la información necesaria para reconstruir el objeto en otro Pitón guion. Proporciona la posibilidad de convertir cualquier objeto Python en un flujo de bytes. Este flujo de bytes contiene toda la información esencial sobre el objeto para que pueda reconstruirse o eliminarse y volver a su forma original en cualquier Python.

Funcionamiento de una serialización
Ejemplo de pepinillo de pitón
Decapado sin lima
En este ejemplo, serializaremos los datos del diccionario y los almacenaremos en un flujo de bytes. Luego estos datos se deserializan usando pickle.cargas() vuelva a funcionar en el objeto Python original.
Python3
import> pickle> # 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> # type(b) gives ;> b>=> pickle.dumps(db)> # For loading> myEntry>=> pickle.loads(b)> print>(myEntry)> |
>
>
Producción:
{'Omkar': {'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000}, 'Jagdish': {'key': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}}> Decapado con una lima
En este ejemplo, usaremos un archivo pickle para escribir primero los datos en él usando la función pickle.dump(). Luego, usando la función pickle.load(), cargaremos el pickle en un script de Python e imprimiremos sus datos en forma de un diccionario de Python.
Python3
código c abs
# 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:
Omkar =>{'clave': 'Omkar', 'nombre': 'Omkar Pathak', 'edad': 21, 'pago': 40000} Jagdish => {'clave ': 'Jagdish', 'nombre': 'Jagdish Pathak', 'edad': 50, 'pago': 50000}> Ventajas de usar Pickle en Python
- 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 volverán a serializar. (El módulo mariscal se interrumpe por esto).
- Compartir objetos (referencias al mismo objeto en diferentes lugares): Esto es similar a los objetos que hacen referencia a sí mismos. Pickle almacena el objeto una vez y garantiza que todas las demás referencias apunten a la copia maestra. Los objetos compartidos siguen siendo compartidos, lo que puede ser muy importante para los objetos mutables.
- Clases definidas por el usuario y sus instancias: Marshal no los admite en absoluto, pero Pickle puede guardar y restaurar instancias de clases de forma transparente. La definición de clase debe ser importable y residir en el mismo módulo que cuando se almacenó el objeto.
Desventajas de usar Pickle en Python
- Dependencia de la versión de Python: Los datos de picle son muy sensibles a la versión de Python que se produjo. Objeto encurtido creado con una versión de Python que puede que no se deshaga en varias versiones.
- No legible: El formato de pickle es binario y los humanos no pueden leerlo ni editarlo fácilmente. Los contratos que estén en formato JSON o XML se pueden modificar fácilmente.
- Gran ineficiencia de datos: Los conjuntos de datos grandes pueden ralentizar el proceso de decapado y decapado. La serialización podría ser más apropiada para tales casos de uso.
Conclusión
Si bien Python Pickle ofrece capacidades para la serialización de objetos, los desarrolladores mantienen limitaciones, especialmente cuando trabajan en varias versiones de Python o manejan grandes conjuntos de datos. Es importante recordar que siempre considere las necesidades específicas de su aplicación para determinar si ickle o una alternativa como JSON o XML es adecuado para la serialización.