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 ShelveA 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 ShelveOs 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:
50Observe 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 ShelveComo 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)]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 ShelveUma 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:
25Conclusã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.