[python-brasil] Salvar e ler atributos de objeto em arquivo (xml ou texto)

952 views
Skip to first unread message

Helton Moraes

unread,
Sep 11, 2010, 6:48:57 PM9/11/10
to python...@yahoogrupos.com.br
Caros colegas

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


George Ribeiro

unread,
Sep 13, 2010, 6:04:32 PM9/13/10
to python...@yahoogrupos.com.br
Você pode usar o módulo shelve[1], assim:

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

Sérgio BR

unread,
Sep 13, 2010, 4:29:18 PM9/13/10
to python...@yahoogrupos.com.br
Helton,

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>

Helton Moraes

unread,
Sep 13, 2010, 11:01:42 PM9/13/10
to python...@yahoogrupos.com.br
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>

Bruno Frare

unread,
Sep 14, 2010, 2:12:22 PM9/14/10
to python...@yahoogrupos.com.br
Oi Helton,

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

Helton Moraes

unread,
Sep 14, 2010, 7:32:32 PM9/14/10
to python...@yahoogrupos.com.br
Olá Amigos!

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

Reply all
Reply to author
Forward
0 new messages