Salvar variaveis e manter o nome para recarregar

538 views
Skip to first unread message

Arnaldo Russo

unread,
Aug 9, 2013, 8:35:44 PM8/9/13
to python-brasil
Ola pessoal,

Como faço para salvar variaveis de diferentes tipos e simplesmente recarrega-las diretamente para o workspace, mantendo o nome que ja estava atribuido anteriormente.

Existe alguma maneira simples e direta, ao inves de usar o np.savez e colocar tudo num dicionario? Para depois disso, ao carregar o arquivo, ter que separar na unha, cada variavel?

digamos que eu tenha matrizes de lugares onde foram encontrados presas e predadores : 
spot_cobras = np.arange(10000).reshape(100,100)
spot_coelhos = np.arange(10000).reshape(100,100)

Como exemplo, como faço para salvar essas variaveis e poder recupera-las de forma facil?
Alguem sabe de alguma maneira para isso?

Se se faz:
np.savez('outfile', spot_cobras=spot_cobras, spot_coelhos=spot_coelhos)
ou mesmo:
np.save('out2',dict(spot_cobras = spot_cobras, spot_coelhos = spot_coelhos))

Isso vai me salvar um dado do tipo  nao direto (numpy.lib.npyio.NpzFile e um numpy.ndarray).
Em nenhum dos casos achei um jeito direto de colocar as minhas variaveis diretamente na memoria em uma outra sessao.

Somente atribuindo novamente o nome da variavel e pegando atraves de ordenaçao a variavel sera´ novamente carregada na memoria.

Mesmo o segundo caso, sendo um jeito mais facil...
dat2 = np.load('out2.npy')
vars = dat2.tolist()
#e assim tenho um dicionario das minhas variaveis
spot_coelhos = vars['spot_coelhos']
mesmo assim elas so estao disponiveis dentro do dicionario.

Gostaria de poder utilizar novamente as variaveis spot_coelhos, por exemplo.

Existe algum jeito mais direto de fazer isso?

Obrigado a todos.

---
Arnaldo D'Amaral Pereira Granja Russo
Lab. de Estudos dos Oceanos e Clima
Instituto de Oceanografia - FURG


Joao S. O. Bueno

unread,
Aug 9, 2013, 11:46:29 PM8/9/13
to Python Brasil
Oi Arnaldo - já que voce está no modo interativo, uma das opções é
atualizar o dicionário
retornado por "globals() " com o dicionário que voce salvou --

so'digitar algo como:
globals().update(vars)

Isso vai criar uma variavel global pra cada entrada no dicionário.


2013/8/9 Arnaldo Russo <arnald...@gmail.com>:
> --
> --
> ------------------------------------
> Grupo Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
>
> <*> Para visitar o site do grupo na web, acesse:
> http://groups.google.com/group/python-brasil
>
> <*> Para sair deste grupo, envie um e-mail para:
> python-brasi...@googlegroups.com
>
> ---
> Você está recebendo esta mensagem porque se inscreveu no grupo
> "python-brasil" dos Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie
> um e-mail para python-brasi...@googlegroups.com.
> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
>
>

Gileno Alves

unread,
Aug 10, 2013, 10:08:48 AM8/10/13
to Python Brasil
Acredito que deseje serializar suas variáveis correto? Pode usar esse módulo:


Você pode salvar o objeto num arquivo e depois recuperar usando o dumps e o load



2013/8/9 Arnaldo Russo <arnald...@gmail.com>
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "python-brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 

Murilo da Silva Ijanc

unread,
Aug 10, 2013, 10:32:43 AM8/10/13
to python...@googlegroups.com
Acho que poderia fazer com o pickle mesmo:

>>> import pickle
>>> var1 = pickle.dump(spot_cobras)
>>> var2 = pickle.dump(spot_coelhos)
depois carrega com o load()
>>> pickle.load(var1)
....

Murilo da Silva Ijanc

unread,
Aug 10, 2013, 10:33:44 AM8/10/13
to python...@googlegroups.com
Acho que poderia fazer com o pickle mesmo:

>>> import pickle
>>> var1 = pickle.dump(spot_cobras)
>>> var2 = pickle.dump(spot_coelhos)
depois carrega com o load()
>>> pickle.load(var1)
....
Em 10/08/2013, às 11:08, Gileno Alves escreveu:

Arnaldo Russo

unread,
Aug 11, 2013, 6:50:03 PM8/11/13
to python-brasil
Obrigado pessoal,

Com o pickle, eu acabo tendo que salvar variaveis separadas, para que elas voltem a ser carregadas com o mesmo nome que tinham.
Ao menos nao consegui fazer o que eu quero, caso alguem possa ajudar com algum codigo funcional,
eu agradeço. 
Para usar o pickle eu preciso instanciar um objeto para salvar antes?

a = dict(spot_cobras = spot_cobras, spot_coelhos = spot_coelhos)
with open('filename.pickle', 'wb') as handle:
    pickle.dump(a, handle)

E depois disso, como abro as variaveis com o mesmo nome?

Nao conhecia essa funçao "globasl()" Foi bastante interessante! Muito obrigado =]
Ela de fato faz o que eu precisava... 
Docstring:
globals() -> dictionary

Return the dictionary containing the current scope's global variables.

Obrigado,
Arnaldo.


---
Arnaldo D'Amaral Pereira Granja Russo
Lab. de Estudos dos Oceanos e Clima
Instituto de Oceanografia - FURG




Reply all
Reply to author
Forward
0 new messages