Cómo usar el módulo de Shelve en Python

Cómo usar el módulo de Shelve en Python
Este artículo cubrirá una guía sobre el uso del módulo "Shelve" en Python. El módulo de Shelve se puede usar para almacenar objetos de Python como pares de valor clave en un archivo externo. Estos pares de valor clave se serializan en transmisiones de bytes, un formato que Python entiende. Por lo tanto, puede guardar los objetos de Python en un archivo y recuperarlos nuevamente en un programa leyendo el archivo donde los datos serializados se han almacenado previamente. Todas las muestras de código en este artículo se prueban con Python versión 3.9.7 en Ubuntu 21.10.

Saqueta y pepinillo

El módulo de Shelve utiliza el módulo "Pickle" de Python debajo para serializar los datos. La principal diferencia entre los módulos de Shelve y Pickle es que se puede utilizar Shelve para asociar objetos serializados con claves. Estas claves se pueden usar como identificadores en su código y puede consultar ellas para obtener el objeto serializado. Pickle, por otro lado, no proporciona una forma nativa de almacenar datos serializados en pares de valores clave, sin algunas soluciones o código personalizado. Por lo tanto, Shelve es más un módulo de conveniencia para facilitar la serialización de los objetos de Python y se puede utilizar para crear bases de datos simples que contienen datos serializados.

Uso básico y sintaxis

Puede abrir un archivo de base de datos utilizando el método "Abrir" disponible en el módulo de Shelve. Este método se puede utilizar como administrador de contexto para que ese archivo esté correctamente cerrado cuando la llamada del método finalice. Aquí hay una muestra de código:

Forma de importación
con Shelve.Abrir ('Prueba.db ', "w") como db:
db ['manzanas'] = 50
db ['oranges'] = 80

La primera declaración importe el módulo de estantería principal en el programa Python. A continuación, usando el "Con SHANTE.Open "Method Call and Contexter Manager," Prueba.El archivo DB "se abre como" DB "en modo de escritura. El archivo puede tener cualquier nombre y extensión. Las dos últimas declaraciones se utilizan para crear dos nuevos pares de valor clave con sintaxis similar a Python Dictionary. Estos pares de valor clave se almacenan en la prueba.Archivo DB en formulario serializado.

Después de ejecutar la muestra de código anterior, si abre la prueba.Archivo DB En un editor de texto, debería ver algunos datos similares a este:

Como puede ver, los datos almacenados en el archivo no están en forma legible por humanos. Sin embargo, si abre este archivo con Shelve, podrá recuperar pares de valores clave en su programa Python. Aquí hay una muestra de código:

Forma de importación
con Shelve.Abrir ('Prueba.db ') como db:
imprimir (db ['manzanas'])
Imprimir (db ['naranjas'])

Los pares de valor clave serializados por Shelve son idénticos a un objeto tipo diccionario en Python y apoyan todos sus métodos. Entonces puede consultar los objetos suministrando una llave en aparatos cuadrados. En las últimas dos declaraciones, el valor de ambas claves se recupera utilizando sintaxis similar a un diccionario. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

50
80

Tenga en cuenta que Python elige automáticamente un formato de archivo de base de datos apropiado para Shelve, teniendo en cuenta el sistema operativo del que se está ejecutando el programa. Sin embargo, no afecta el uso del módulo de envío y la funcionalidad de los objetos serializados al usarlo.

Obtener todos los pares de valor clave a partir de un archivo de base de datos creado con Shelve

Para obtener todas las claves y pares de valor, debe llamar a métodos de "claves" y "valores", como lo haría con un objeto tipo diccionario en Python. Aquí hay una muestra de código:

Forma de importación
con Shelve.Abrir ('Prueba.db ') como db:
elementos = lista (db.elementos())
claves = lista (db.llaves())
valores = list (db.valores())
Imprimir (artículos)
Imprimir (teclas)
Imprimir (valores)

Como puede ver en la muestra de código anterior, se han llamado a los "elementos", "claves" y "valores" para recuperar claves y valores. Estas claves y valores son objetos de tipo de estantería, por lo que debe convertirlos en una lista o cualquier otro iterable para obtener sus valores reales. Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

[('manzanas', 50), ('naranjas', 80)]
['manzanas', 'naranjas']
[50, 80]

Tenga en cuenta que si solo desea iterar sobre claves y valores, puede hacerlo usando para el bucle o cualquier otra declaración sin convertir claves y valores en una lista de Python o cualquier otro objeto de este tipo.

Puede serializar funciones y clases utilizando Shelve

Puede serializar cualquier objeto de Python utilizando el módulo de Shelve, incluso funciones y clases. Aquí hay un ejemplo que ilustra la serialización de una función, recuperándola y luego llamándolo para hacer algunos cálculos.

Forma de importación
Def cuadrado (número):
Número de devolución * Número
con Shelve.Abrir ('Prueba.db ', "w") como db:
DB ['Square_Function'] = Square
con Shelve.Abrir ('Prueba.db ') como db:
cuadrado = db ['square_function']
Imprimir (cuadrado (5))

Se ha definido una nueva función llamada "cuadrado". Calcula el cuadrado de un número y lo devuelve. A continuación, esta función se serializa utilizando Shelve y se almacena en la prueba.archivo de base de datos DB. La función serializada se lee nuevamente en la variable "cuadrado". Dado que la variable cuadrada ahora es una instancia de la función cuadrada definida anteriormente, puede llamarla para calcular el cuadrado de un número.

Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

25

Conclusión

La serialización es un proceso de almacenar objetos de pitón en un archivo de base de datos para que puedan recuperarse en una forma que sea exactamente igual a la forma en que se definieron originalmente antes de serializar. Esto le permite almacenar objetos complejos de pitón en formato estructurado. El módulo de Shelve utiliza el módulo de encurtido para almacenar y recuperar objetos de pitón serializados. Utiliza la estructura de pares de valor clave para manejar objetos serializados, lo que facilita la gestión.