Estou aprendendo devagarinho o Python, e tenho um problema que deve ser
fácil de resolver, mas não consegui achar um tutorial ou um conceito decente
para pesquisar.
É o seguinte: tenho uma classe que consiste apenas em uma lista de
parâmetros numéricos. Digamos que fossem as medidas de uma pessoa: a pessoa
"fulano de tal" tem:
altura = 185
peso = 90
etc.
No arquivo isso aparece assim:
fulano = Person()
fulano.altura=85
fulano.peso=90
Como eu faria (que comando usar) para salvar isso em um arquivo texto (csv,
xml), algo no estilo:
save fulano.dict(filename=fulano.txt)
========
altura,185
peso,90
========
pessoa = read_from_file(fulano.txt)
print pessoa.__dict__ (ou algo que o valha)
("altura":185; "peso":90)
++++++++++++++++++++++
detalhe: a sintaxe acima está toda errada, é só pra dar a idéia do que eu
pretendo fazer: salvar atributos de um objeto de uma classe em um arquivo
para que eu possa criar algum objeto futuramente com os mesmos atributos
gravados naquele arquivo, lendo-o.
Grato pela paciência e pela atenção
Helton
[As partes desta mensagem que não continham texto foram removidas]
------------------------------------
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html
>>> class Person(object):
... def __init__(self, nome, altura):
... self.nome = nome
... self.altura = altura
...
>>> p = Person("george", 1.70)
>>> import shelve
>>> shelve.open("people")
{}
>>> db = shelve.open("people")
>>> db["person1"] = p
>>> db.close()
E para recuperar o objeto:
>>> class Person(object):
... def __init__(self, nome, altura):
... self.nome = nome
... self.altura = altura
...
>>> import shelve
>>> db = shelve.open("people")
>>> p = db["person1"]
>>> p
<__main__.Person object at 0x1004a9ad0>
>>> p.nome
'george'
>>> p.altura
1.70
>>> db.close()
Para algo mais elaborado você pode usar o módulo pickle[2].
[1]: http://docs.python.org/library/shelve.html
[2]: http://docs.python.org/library/pickle.html
Espero ter ajudado.
--
George Ribeiro
blog: blog.georgeribeiro.net
djangopeople: djangopeopple.net/georgeribeiro
twitter: @georgepython
Provavelmente o que você procura pode ser resolvido pelo pickle.
Ele lê e grava estruturas python em arquivos texto. Ainda que não sejam
arquivos xml ou csv, me parece que ele resolve o seu problema completamente.
[]s e boa sorte.
2010/9/11 Helton Moraes <helto...@gmail.com>
Mas tenho mais uma pergunta: um dos meus "requisitos" é realmente gravar um
arquivo que eu possa abrir e editar como texto, e não um binário. Por
exemplo, um formato com alguma marcação (seja padrão - xml - ou um .csv
arbitrário que meu programa vá ler).
Portanto a pergunta continua sendo: que comandos ou que estratégias eu
deveria usar para salvar e carregar parâmetros a partir de arquivos de
texto?
Assim, eu posso criar mais objetos manualmente "de fora" do python, se
bobear até usando um editor de planilha como o Excel ou o Calc... Ou o
notepad... ou o que for.
De qualquer maneira, obrigado pela ajuda, não sabia da existência do shelve,
vou ver se dou uma olhada.
Até mais
Helton
2010/9/13 George Ribeiro <georg...@gmail.com>
No Caso de XML, acho que você está querendo algo parecido com isso:
http://www.postneo.com/projects/pyxml/
Nos docs do python tem as explicações
http://docs.python.org/library/xml.dom.minidom.html
Agora me .csv, eu fiz na não!
Abraços
Bruno
2010/9/14 Helton Moraes <helto...@gmail.com>
>
>
> Obrigado, George, pela resposta!
>
> Mas tenho mais uma pergunta: um dos meus "requisitos" é realmente gravar um
> arquivo que eu possa abrir e editar como texto, e não um binário. Por
> exemplo, um formato com alguma marcação (seja padrão - xml - ou um .csv
> arbitrário que meu programa vá ler).
> Portanto a pergunta continua sendo: que comandos ou que estratégias eu
> deveria usar para salvar e carregar parâmetros a partir de arquivos de
> texto?
>
> Assim, eu posso criar mais objetos manualmente "de fora" do python, se
> bobear até usando um editor de planilha como o Excel ou o Calc... Ou o
> notepad... ou o que for.
>
> De qualquer maneira, obrigado pela ajuda, não sabia da existência do
> shelve,
> vou ver se dou uma olhada.
>
> Até mais
>
> Helton
>
> 2010/9/13 George Ribeiro <georg...@gmail.com <george.rib%40gmail.com>>
> > ,----------------------------------------------------------.
> > | Antes de enviar um e-mail para o grupo leia: |
> > | http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
> > | E se você é usuário do BOL lembre-se de cadastrar o |
> > | e-mail do grupo na lista branca do seu sistema anti-spam. |
> > `----------------------------------------------------------´Links do
> > Yahoo! Grupos
>
> >
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
--
________________
Bruno Pinaffi Frare
Universidade Federal de Itajubá
ECO - 2005
(35) 8828-8456
(12) 9115-2430
bpf...@gmail.com
pai...@gmail.com
Obrigado pelas dicas, ainda vou dar uma aprofundada na arquitetura do meu
programinha antes de decidir entre pickle, xml, .csv, sqlite ou uma mistura
entre mais de um desses, e agradeço a ajuda até então.
Escrevo novamente par compartilhar uma "sacada" de um amigo meu que é heavy
user de linux e é fã dos arquivos de configuração, que nada mais são do que
uns textos formatadinhos no estilo .INI do windows.
Pois o fato é que existe um módulo chamado ConfigParser, cujos objetos são
os RawConfigParsers, que têm vários métodos para criar, ler e validar
entradas. Uma possibilidade no meu caso, portanto, seria ao invés de ter um
objeto da minha classe e salvá-lo como pickle, criar um objeto
RawConfigParser cujos atributos no formato chave=valor seriam lidos direto
de algum arquivo de texto.
Para coisas muito simples, e dependendo dos objetivos, me pareceu uma
alternativa que vale a pena ser considerada.
Até mais
Helton