Ver Feed RSS

root@blog:/# chmod o+r *

Python: Shelve - Persistencia de Dados de Forma Simples

Avalie este Post de Blog
A uns dias uma cara no forum abriu essa thread falando que estava precisando criar uma listagem de 20 músicas aleatória baseado nas músicas que ele tem no HD.

Eu ia sugerir um shell-script básico mas ai o PedroArtur sugeriu uma solução com Python. Eu achei legal a solução do Pedro e acabei sugerindo criar um banco de dados simples com o SQLite para tornar o processo mais rápido. O resultado ficou bem legal. Mas até um pouco complexo pra algo simples... QUem quiser ver, o código fonte tá lá. Só não reparem a bagunça, fiz com pressa...

Pensei em usar algumas coisas mais simples, mas como o numero de músicas pode se tornar grande um BD simples foi a melhor opção mesmo. Mas para programas simples, onde a quantidade de dados a ser armazenado é baixo, podemos utilziar uma solução mais Pythoniana: Shelve

O Shelve é um módulo muito útil para quem quer fazer programas que armazenam dados, sejam passados por usuário ou configurações do programa. Um exemplo simples:

Código:
>>> import shelve
>>>
>>> x = 10
>>> y = \"string de teste\"
>>> z = 1.2
>>>
>>> dados = shelve.open(\"dados.db\")
>>> dados[\"x\"] = x
>>> dados[\"y\"] = y
>>> dados[\"z\"] = z
>>> dados.close()
>>>
>>> exit()

Pra quem não entendeu nada disso ai em cima, sugiro antes ler isso aqui.



Explicando o código:

  1. Importei o módulo shelve;
  2. criei os dados x, y e z;
  3. criei um "banco de dados". Esse arquivo dados.db não precisa existir anteriormente, ele é criado no HD, no diretório corrente do programa;
  4. "Inseri" no arquivo dados.db as variáveis x, y e z com os nomes x, y e z;
  5. Fechei o "banco de dados".


Pronto, nossas variáveis x, y e z estão armazenadas! Como pegar elas de volta?? Vamos lá...

Código:
>>> import shelve
>>> dados = shelve.open(\"dados.db\")
>>>
>>> x = dados[\"x\"]
>>> y = dados[\"y\"]
>>> z = dados[\"z\"]
>>> print x
10
>>> print y
string de teste
>>> print z
1.2
>>> dados.close()
>>> exit()
Simples não?! Mais simples que usar o Hibernate - persistencia de dados em Java - ou criar arquivos de configuração em C...

A parte mais legal do shelve é que nele você pode guardar qualquer tipo de variável: tuplas, listas, dicionários... A primeira vez que trabalhei com o shelve eu armazenava instâncias de classes . Sério, olha só:

Código:
>>> import shelve
>>> class Pessoa:
...  def __init__(self, idade, nome):
...   self.idade = idade
...   self.nome = nome
...
>>> p = Pessoa(23, \"Magnun Leno\")
>>> p.nome
'Magnun Leno'
>>> p.idade
23
>>> dados = shelve.open(\"dados.db\")
>>> dados[\"eu\"] = p
>>> dados.close()
>>> exit()
Agora recuperar a instancia:
Código:
>>> import shelve
>>>
>>> class Pessoa:
...  def __init__(self, idade, nome):
...   self.idade = idade
...   self.nome = nome
...
>>> dados = shelve.open(\"dados.db\")
>>> p = dados[\"eu\"]
>>> p.nome
'Magnun Leno'
>>> p.idade
23
>>> dados.close()
Bem, ai está a dica! Façam bom uso!

Atualizado 11-01-2010 em 12:37 por Magnun

Categorias
Dicas , Python , Dicas

Comentários

Página 1 de 2 12 ÚltimoÚltimo
  1. Avatar de gustavoh
    Muito boa essa dica. Eu tava mesmo querendo salvar configuracoes de um sistema sem ter que ficar manipulando txt e banco de dados. acho que o shelve vai ser bem util.
  2. Avatar de Magnun
    Tem outro muito bom também que cria arquivos de configuração usando sessões e chaves... mas não acho ele tão simples! É mais difícil de manipular também, você tem que ter certeza do tipo do dado. Não é tão automático quanto o shelve...

    Vou ver se depois posto ele por aqui...
  3. Avatar de PEdroArthurJEdi
    Foi meu primeiro script Python
    O problema era bem interessante e ótimo para treinar lists comprehensions

    Veleu pela dica do shelve...
  4. Avatar de Magnun
    Pô... pra um primeiro script foi ótimo!!!

    Também não esperaria menos que alguém que "trabalha" com o Prf. Eriberto...
  5. Avatar de felipeett
    Estou tentando fazer uma agenda usando persistência, mas não estou conseguindo armazenar variáveis do tipo list.
    Você poderia me dar uma ajuda com esse problema
    vlw
Página 1 de 2 12 ÚltimoÚltimo

+ Enviar Comentário



Visite: BR-Linux ·  VivaOLinux ·  Dicas-L