Módulo shelve em Python
O módulo shelve permite salvar objetos em arquivos binários usando uma chave específica. Com essa chave, é possível recuperar o objeto salvo no arquivo posteriormente. O shelve funciona de maneira semelhante a um dicionário, pois permite salvar e recuperar dados com o uso de chaves.
Abrindo um Arquivo
Para abrir um arquivo, o shelve utiliza a função open():
shelve.open(caminho_do_arquivo[, flag="c"[, protocol=None[, writeback=False]]])O parâmetro flag pode assumir os seguintes valores:
c: o arquivo é aberto para leitura e escrita (padrão). Se o arquivo não existir, ele será criado.r: o arquivo é aberto apenas para leitura.w: o arquivo é aberto apenas para escrita.n: o arquivo é aberto para escrita. Se o arquivo não existir, ele será criado. Se existir, será sobrescrito.
Para fechar a conexão com o arquivo, utiliza-se o método close():
import shelve
d = shelve.open(filename)
d.close()Uma alternativa mais segura é utilizar o operador with, que garante o fechamento automático do arquivo:
import shelve
FILENAME = "states"
with shelve.open(FILENAME) as states:
states["Brasília"] = "Brazil"
states["Paris"] = "France"
states["Berlin"] = "Germany"
states["Madrid"] = "Spain"
with shelve.open(FILENAME) as states:
print(states["London"])
print(states["Madrid"])Salvando Dados
Para salvar dados, basta atribuir um valor a uma chave específica:
states["Brasília"] = "Brazil"Lendo Dados
A leitura dos dados é feita acessando o valor pela chave:
print(states["Brasília"])Se a chave não existir, ocorre uma exceção. Para evitar isso, verifique a existência da chave usando o operador in:
with shelve.open(FILENAME) as states:
key = "Brussels"
if key in states:
print(states[key])Outra alternativa é o método get(), que aceita um valor padrão caso a chave não seja encontrada:
with shelve.open(FILENAME) as states:
state = states.get("Brussels", "Undefined")
print(state)Iterando sobre os Dados
Para percorrer todos os itens no arquivo, pode-se usar um laço for:
with shelve.open(FILENAME) as states:
for key in states:
print(key, " - ", states[key])Os métodos keys() e values() retornam, respectivamente, todas as chaves e valores do arquivo:
with shelve.open(FILENAME) as states:
for city in states.keys():
print(city, end=" ") # Brasília Paris Berlin Madrid
print()
for country in states.values():
print(country, end=" ") # Brazil France Germany SpainO método items() retorna uma lista de tuplas com chave e valor:
with shelve.open(FILENAME) as states:
for state in states.items():
print(state) # ('Brasília', 'Brazil') ('Paris', 'France') ('Berlin', 'Germany') ('Madrid', 'Spain')Atualização de Dados
Para atualizar um valor, basta redefinir a chave. Para adicionar novos dados, crie uma nova chave:
import shelve
FILENAME = "states"
with shelve.open(FILENAME) as states:
states["London"] = "Great Britain"
with shelve.open(FILENAME) as states:
states["London"] = "United Kingdom"
states["Brussels"] = "Belgium"
states["Kiev"] = "Ukraine"
for key in states:
print(key, " - ", states[key])Remoção de Dados
Para remover um item e retornar seu valor simultaneamente, utilize pop(), especificando a chave e um valor padrão para o caso de a chave não existir:
with shelve.open(FILENAME) as states:
state = states.pop("London", "Not Found")
print(state)Outra opção para remover um item é o operador del:
with shelve.open(FILENAME) as states:
del states["Madrid"]Para remover todos os elementos de uma só vez, utilize o método clear():
with shelve.open(FILENAME) as states:
states.clear()Essas são as operações básicas do módulo shelve para manipulação de dados em arquivos binários no Python, oferecendo métodos de leitura, escrita, atualização e remoção, de forma semelhante ao trabalho com dicionários.
Documentação oficial: