Como usar o módulo Shelve em Python

Como usar o módulo Shelve em Python
Este artigo abordará um guia sobre o uso do módulo "Shelve" em Python. O módulo Shelve pode ser usado para armazenar objetos Python como pares de valor-chave em um arquivo externo. Esses pares de valor-chave são serializados em fluxos de bytes, um formato que Python entende. Assim, você pode salvar objetos python em um arquivo e recuperá -los novamente em um programa lendo o arquivo onde dados serializados foram armazenados anteriormente. Todas as amostras de código deste artigo são testadas com Python versão 3.9.7 no Ubuntu 21.10.

Shelve e Pickle

O módulo Shelve usa o módulo "Pickle" do Python por baixo para serializar os dados. A principal diferença entre os módulos de Shelve e Pickle é que Shelve pode ser usado para associar objetos serializados a chaves. Essas chaves podem ser usadas como identificadores em seu código e você pode se referir a eles para obter o objeto serializado. O picles, por outro lado, não fornece uma maneira nativa de armazenar dados serializados em pares de valor-chave, sem algumas soluções alternativas ou código personalizado. Assim, Shelve é mais um módulo de conveniência para facilitar a serialização de objetos python e pode ser usada para criar bancos de dados simples contendo dados serializados.

Uso básico e sintaxe

Você pode abrir um arquivo de banco de dados usando o método "aberto" disponível no módulo Shelve. Este método pode ser usado como gerente de contexto para que esse arquivo seja fechado corretamente quando a chamada do método termina. Aqui está uma amostra de código:

importar Shelve
com Shelve.aberto ('teste.db ', "w") como db:
dB ['maçãs'] = 50
dB ['laranjas'] = 80

A primeira declaração importa o módulo principal do Shelve para o programa Python. Em seguida, usando o “com Shelve.Open ”Chamada de Método e Gerente de Contexto,“ Teste.O arquivo db ”é aberto como“ dB ”no modo de gravação. O arquivo pode ter qualquer nome e extensão. As duas últimas declarações são usadas para criar dois novos pares de valor-chave usando sintaxe do tipo Dicionário Python. Esses pares de valor-chave são então armazenados no teste.arquivo db em forma serializada.

Depois de executar o exemplo de código acima, se você abrir o teste.Arquivo DB Em um editor de texto, você deve ver alguns dados semelhantes a este:

Como você pode ver, os dados armazenados no arquivo não estão em forma de legível humana. No entanto, se você abrir este arquivo usando o Shelve, poderá recuperar pares de valor-chave em seu programa Python. Aqui está uma amostra de código:

importar Shelve
com Shelve.aberto ('teste.db ') como db:
Imprimir (dB ['maçãs'])
Imprimir (dB ['laranjas'])

Os pares de valor-chave serializados por Shelve são idênticos a um objeto do tipo dicionário em Python e apóiam todos os seus métodos. Assim, você pode se referir a objetos fornecendo uma chave em aparelhos quadrados. Nas duas últimas declarações, o valor de ambas as teclas é recuperado usando sintaxe do tipo dicionário. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

50
80

Observe que o Python escolhe automaticamente um formato de arquivo de banco de dados apropriado para Shelve, levando em consideração o sistema operacional do qual o programa está sendo executado. No entanto, isso não afeta o uso do módulo Shelve e a funcionalidade dos objetos serializados usando -o.

Colocando todos os pares de valores-chave de um arquivo de banco de dados criado usando o Shelve

Para obter todas as chaves e pares de valor, você precisa chamar "teclas" e "valores" métodos, assim como você faria com um objeto do tipo dicionário em Python. Aqui está uma amostra de código:

importar Shelve
com Shelve.aberto ('teste.db ') como db:
itens = lista (dB.Unid())
chaves = lista (db.chaves())
valores = lista (db.valores ()))
Impressão (itens)
Imprimir (chaves)
Impressão (valores)

Como você pode ver na amostra de código acima, "itens", "chaves" e "valores" métodos foram chamados para recuperar chaves e valores. Essas chaves e valores são objetos do tipo Shelve, então você precisa convertê -los em uma lista ou qualquer outro itemerável para obter seus valores reais. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

[('Apples', 50), ('laranjas', 80)]
['Maçãs', 'laranjas']
[50, 80]

Observe que, se você deseja apenas iterar as teclas e valores, pode fazê -lo usando o loop ou qualquer outra instrução sem converter chaves e valores em uma lista Python ou qualquer outro objeto desse tipo.

Você pode serializar funções e aulas usando Shelve

Você pode serializar qualquer objeto Python usando o módulo Shelve, até funções e classes. Aqui está um exemplo ilustrando a serialização de uma função, recuperando -a de volta e depois chamando -a para fazer alguns cálculos.

importar Shelve
Def Square (número):
Número de retorno * Número
com Shelve.aberto ('teste.db ', "w") como db:
dB ['square_function'] = quadrado
com Shelve.aberto ('teste.db ') como db:
Square = dB ['Square_function']
Imprimir (quadrado (5))

Uma nova função chamada "quadrado" foi definida. Ele calcula o quadrado de um número e o retorna. Em seguida, esta função é serializada usando Shelve e armazenada no teste.Arquivo de banco de dados DB. A função serializada é então lida de volta à variável "quadrado". Como a variável quadrada é agora uma instância da função quadrada definida anteriormente, você pode chamá -la para calcular o quadrado de um número.

Depois de executar a amostra de código acima, você deve obter a seguinte saída:

25

Conclusão

A serialização é um processo de armazenamento de objetos Python em um arquivo de banco de dados para que eles possam ser recuperados de uma forma exatamente a mesma que foram originalmente definidos antes de serializar. Isso permite armazenar objetos complexos de python em formato estruturado. O módulo Shelve usa módulo de picles para armazenar e recuperar objetos Python serializados. Ele usa a estrutura dos pares de valores-chave para lidar com objetos serializados, facilitando gerenciá-los.