Atualizado: 04/11/2024

Módulo shelve - 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 Spain

O 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.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com