Dúvida: adicionar novos dados numéricos a um arquivo txt

68 views
Skip to first unread message

jmarcell...@ufpi.edu.br

unread,
Aug 14, 2016, 7:47:49 PM8/14/16
to Python Brasil
Olá a todos

Tenho o seguinte problema:
quero salvar varias matrizes de mesma dimensão e valores diferentes em um mesmo arquivo texto. Tentei o código:

import numpy as np

matriz
= matrix([[1.01,2.5,3.9],[0.4,0.55,6.8],[7.0,8.0,9.89]])

np
.savetxt('matriz_arquivo.txt', matriz,fmt='%f')

np
.loadtxt('matriz_arquivo.txt')

    array([[ 1.01,  2.5 ,  3.9 ],
           
[ 0.4 ,  0.55,  6.8 ],
           
[ 7.  ,  8.  ,  9.89]])

Só que quando salvo outra matriz no arquivo, a matriz anterior é apagada. Como fazer para adicionar ao final tipo append?

Eric Chiesse

unread,
Aug 14, 2016, 8:42:12 PM8/14/16
to python...@googlegroups.com

---
Eric

--
--
------------------------------------
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-brasil+unsubscribe@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

jmarcell...@ufpi.edu.br

unread,
Aug 14, 2016, 10:27:56 PM8/14/16
to Python Brasil
É quase isso. O comando savetxt também salva multiplos arrays de uma vez, mas eu quero é salvar tipo append - escrever outra matriz ao final do arquivo mantendo a anterior. Esse formato também é ruim pois ao abrir no bloco de notas a visualização é marciana e quando é escrito uma outra matriz, de novo apaga anterior.

---
Eric



---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.

Elton Pereira

unread,
Aug 15, 2016, 9:38:57 PM8/15/16
to Python Brasil
Eu fiz aqui e funcionou da seguinte forma:

import numpy as np

matriz = np.matrix([[1.01,2.5,3.9],[0.4,0.55,6.8],[7.0,8.0,9.89]])
matriz_fp = open('matriz_arquivo.txt', 'ab+')

np.savetxt(matriz_fp, matriz,fmt='%f')
np.loadtxt('matriz_arquivo.txt')

--
Elton Pereira de Lima
-----------------------------
Reality is our God
Science is our Bible
Evidence is our Scripture
Big History is our Creation Story
Ecology is our Theology
Integrity is our Salvation
Positive Evolution is our Mission

jmarcell...@ufpi.edu.br

unread,
Aug 16, 2016, 1:04:56 AM8/16/16
to Python Brasil
Olá elton

Cara fantástica a solução! nunca me passou pela cabeça abrir o arquivo com 'ab+' e forçar a gravação, heehehehe. Muito bom e os dados ainda ficam bem organizados no txt. Vi que, estou usando o SageMath, ocorre um erro na primeira execução mas os dados são gravados, depois corrigi fechando o arquivo ao final.

import numpy as np

matriz1
= np.matrix([[9.0,9.0,9.0],[9.0,9.0,9.0],[9.0,9.0,9.0]])
matriz_fp
= open('matriz_arquivo10.txt', 'ab+')

np
.savetxt(matriz_fp, matriz1,fmt='%f')
np
.loadtxt('matriz_arquivo10.txt')
matriz_fp
.close()

!cat matriz_arquivo10.txt

matriz2
= np.matrix([[1.0,2.0,3.0],[0.4,0.5,0.6],[7.0,8.0,9.0]])
matriz_fp
= open('matriz_arquivo10.txt', 'ab+')

np
.savetxt(matriz_fp, matriz2,fmt='%f')
np
.loadtxt('matriz_arquivo10.txt')

matriz_fp
.close()

!cat matriz_arquivo10.txt

Elton Pereira

unread,
Aug 16, 2016, 9:41:36 AM8/16/16
to Python Brasil
Eu vi agora que esqueci de fechar o arquivo, hehehehe.

Que tal melhorarmos seu código para isso nunca acontecer?

import numpy as np

matriz1 = np.matrix([[9.0,9.0,9.0],[9.0,9.0,9.0],[9.0,9.0,9.0]])
matriz2 = np.matrix([[1.0,2.0,3.0],[0.4,0.5,0.6],[7.0,8.0,9.0]])

def record_matrix(file_path, matrix, file_mode="ab+"):
    with open(file_path, file_mode) as matrix_fp:
        np.savetxt(matrix_fp, matrix, fmt='%f')

def load_matrix(file_path):
    np.loadtxt(file_path)

matrix_file_path = "matrix.txt"
record_matrix(matrix_file_path, matriz1)
record_matrix(matrix_file_path, matriz2)
load_matrix(matrix_file_path)

É só uma sugestão. Espero que ajude!

OBS: Como faço para colar o código com syntax highlighting?

--
--
------------------------------------
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ê recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--

jmarcell...@ufpi.edu.br

unread,
Aug 16, 2016, 11:42:01 AM8/16/16
to Python Brasil
Olá Elton

O código ficou show de bola, 7x1! eu usei com uma pequena modificação: excluí a def load_matrix(file_path), pois como ja tem um comando direto, fica mais simples para mim usar este comando. Para usar o syntax highlighting, aqui no editor tem na barra de edição o símbolo de duas chaves que serve para fazer a formatação. Agradeço muito pela boa ideia ;)

import numpy as np

matriz1
= np.matrix([[9.0,9.0,9.0],[9.0,9.0,9.0],[9.0,9.0,9.0]])
matriz2
= np.matrix([[1.0,2.0,3.0],[0.4,0.5,0.6],[7.0,8.0,9.0]])

def record_matrix(file_path, matrix, file_mode="ab+"):
   
with open(file_path, file_mode) as matrix_fp:
        np
.savetxt(matrix_fp, matrix, fmt='%f')


matrix_file_path
= "matrix1.txt"
record_matrix
(matrix_file_path, matriz1)
record_matrix
(matrix_file_path, matriz2)
np
.loadtxt(matrix_file_path)


Elton Pereira

unread,
Aug 16, 2016, 11:58:50 AM8/16/16
to Python Brasil
A tá, agora entendi, é porque estou respondendo direto pelo meu e-mail.

Fico feliz que a solução te agradou!

Valeu!

--
--
------------------------------------
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ê recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
Message has been deleted
0 new messages