[python-brasil] Arquivo TXT operações com linhas e colunas

7,623 views
Skip to first unread message

Anna Paula Fagundes

unread,
Mar 23, 2010, 9:39:45 PM3/23/10
to python...@yahoogrupos.com.br
Olá pessoal,

sou iniciante na linguagem python e quero fazer algumas operações com
um arquivo .txt (esse tem várias linhas e colunas), como por exemplo:

- somar todos os valores de uma coluna;
- multiplicar valores de uma coluna com as da outra;
- ....

Outra coisa a separação entre valores de uma coluna e outra pode ser
";" ou necessariamente tem que ser espaço?

Eu já li o tutorial e não achei nada relacionado a isso.

Acredito que seja algo bem simples em python, mas eu não estou
conseguindo fazer hahahah

se alguém puder me ajudar eu agradeço.

Obrigada

Att

Anna Paula


------------------------------------

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


Paulo Eduardo Neves

unread,
Mar 23, 2010, 11:16:11 PM3/23/10
to python...@yahoogrupos.com.br
Basicamente o que você tem que fazer é separar cada linha nas colunas.
Como será feito, vai depender dos dados que você estará tratando. Ser
forem simples colunas separadas por espaços, basta fazer:
cols = linha.split()
separado por vírgula?
cols = linha.split(',')

mas se você estiver gravando uma planilha, que, por exemplo, tenha uma
coluna de texto que pode ter vírgula dentro, aí é melhor usar o módulo
csv da biblioteca padrão. É mais enrolado, mas funcionará até se tiver
uma quebra de linha no meio do texto de uma coluna.

abs

2010/3/23 Anna Paula Fagundes <ap.fa...@gmail.com>:


> Olá pessoal,
>
> sou iniciante na linguagem python e quero fazer algumas operações com
> um arquivo .txt (esse tem várias linhas e colunas), como por exemplo:
>
> - somar todos os valores de uma coluna;
> - multiplicar valores de uma coluna com as da outra;
> - ....
>
> Outra coisa a separação entre valores de uma coluna e outra pode ser
> ";" ou necessariamente tem que ser espaço?
>
> Eu já li o tutorial e não achei nada relacionado a isso.
>
> Acredito que seja algo bem simples em python, mas eu não estou
> conseguindo fazer hahahah
>
> se alguém puder me ajudar eu agradeço.
>
> Obrigada
>
> Att
>
> Anna Paula
>


--
Paulo Eduardo Neves
http://www.mosquito.pro.br

pdropi

unread,
Mar 24, 2010, 2:38:19 AM3/24/10
to python...@yahoogrupos.com.br
É basicamente o que o Paulo Neves disse.
só para completar:
se quiser, pode sim utilizar ";" para separar as colunas.
quando quiser separar, use:

colunas=linha.split(';')

agora, para somar valores das colunas, poderá fazer de várias formas.
uma forma é, por exemplo:
se quiser somar os valores (números) da primeira coluna:

coluna1=0 #começa com o valor "zero"
for linha in arquivo:
coluna=linha.split(';')
coluna1+=coluna[0] #posição zero é a primeira

se não for número, vai concatenar se deixar como string

espero ter ajudado
até mais

--- Em python...@yahoogrupos.com.br, Paulo Eduardo Neves <pauloneves@...> escreveu


>
> Basicamente o que você tem que fazer é separar cada linha nas colunas.
> Como será feito, vai depender dos dados que você estará tratando. Ser
> forem simples colunas separadas por espaços, basta fazer:
> cols = linha.split()
> separado por vírgula?
> cols = linha.split(',')
>
> mas se você estiver gravando uma planilha, que, por exemplo, tenha uma
> coluna de texto que pode ter vírgula dentro, aí é melhor usar o módulo
> csv da biblioteca padrão. É mais enrolado, mas funcionará até se tiver
> uma quebra de linha no meio do texto de uma coluna.
>
> abs
>

> 2010/3/23 Anna Paula Fagundes <ap.fagundes@...>:

Anna Paula Fagundes

unread,
Mar 24, 2010, 4:51:50 PM3/24/10
to python...@yahoogrupos.com.br
Obrigada Paulo e 'pdropi',

consegui fazer o que vocês me indicaram porém quando executo o script, as
informações do arquivo .txt são consideradas como string, ou seja, quando eu
peço para somar uma coluna com a outra, ele concatena e não soma.

Não entendi porque acontece isso, pois sei que em python não precisa
declarar a função, uma vez que os números são float e se apresentam com
algumas casas decimais.

Alguma idéia de como resolver?

Obrigada

Att

Anna Paula


2010/3/24 pdropi <pdr...@yahoo.com.br>

>
>
> É basicamente o que o Paulo Neves disse.
> só para completar:
> se quiser, pode sim utilizar ";" para separar as colunas.
> quando quiser separar, use:
>
> colunas=linha.split(';')
>
> agora, para somar valores das colunas, poderá fazer de várias formas.
> uma forma é, por exemplo:
> se quiser somar os valores (números) da primeira coluna:
>
> coluna1=0 #começa com o valor "zero"
> for linha in arquivo:
> coluna=linha.split(';')
> coluna1+=coluna[0] #posição zero é a primeira
>
> se não for número, vai concatenar se deixar como string
>
> espero ter ajudado
> até mais
>

> --- Em python...@yahoogrupos.com.br<python-brasil%40yahoogrupos.com.br>,


[As partes desta mensagem que não continham texto foram removidas]

Luciano Ramalho

unread,
Mar 24, 2010, 5:26:37 PM3/24/10
to python...@yahoogrupos.com.br
2010/3/24 Anna Paula Fagundes <ap.fa...@gmail.com>:

> Não entendi porque acontece isso, pois sei que em python não precisa
> declarar a função, uma vez que os números são float e se apresentam com
> algumas casas decimais.

Python, graças a Guido, não faz jamais conversão automática de strings
para números ou vice-versa (este é um dos maiores erros que os
criadores de JavaScript e PHP cometeram).

> Alguma idéia de como resolver?

Pegue cada valor e passe pela função float(x).

[ ]s
Luciano

--
"""
O burocrata consegue transformar qualquer solução em um problema.

Anna Paula Fagundes

unread,
Mar 25, 2010, 8:38:21 AM3/25/10
to python...@yahoogrupos.com.br
Oi luciano,

obrigada pelo esclarecimento, mas em se tratando de colunas com milhares de
números fica inviável fazer essa conversão número a número.

Não existe uma função que possa selecionar a coluna toda e fazer a conversão
dos números que estão nas linhas?

Obrigada

Att

Anna Paula


2010/3/24 Luciano Ramalho <ram...@gmail.com>

>
>
> 2010/3/24 Anna Paula Fagundes <ap.fa...@gmail.com<ap.fagundes%40gmail.com>


> >:
>
> > Não entendi porque acontece isso, pois sei que em python não precisa
> > declarar a função, uma vez que os números são float e se apresentam com
> > algumas casas decimais.
>
> Python, graças a Guido, não faz jamais conversão automática de strings
> para números ou vice-versa (este é um dos maiores erros que os
> criadores de JavaScript e PHP cometeram).
>
>
> > Alguma idéia de como resolver?
>
> Pegue cada valor e passe pela função float(x).
>
> [ ]s
> Luciano
>
> --
> """
> O burocrata consegue transformar qualquer solução em um problema.
> """
>
>

[As partes desta mensagem que não continham texto foram removidas]

------------------------------------

Luciano Ramalho

unread,
Mar 25, 2010, 9:33:25 AM3/25/10
to python...@yahoogrupos.com.br
2010/3/25 Anna Paula Fagundes <ap.fa...@gmail.com>:

> obrigada pelo esclarecimento, mas em se tratando de colunas com milhares de
> números fica inviável fazer essa conversão número a número.

Não é inviável. E além de ser viável, é o único jeito.

> Não existe uma função que possa selecionar a coluna toda e fazer a conversão
> dos números que estão nas linhas?

Não.

[ ]s
Luciano


--
"""
O burocrata consegue transformar qualquer solução em um problema.
"""

Junior Polegato - Linux

unread,
Mar 25, 2010, 1:45:29 PM3/25/10
to python...@yahoogrupos.com.br
Anna Paula Fagundes escreveu:

> Oi luciano,
> obrigada pelo esclarecimento, mas em se tratando de colunas com milhares de
> números fica inviável fazer essa conversão número a número.
> Não existe uma função que possa selecionar a coluna toda e fazer a conversão
> dos números que estão nas linhas?
> Obrigada
> Att
> Anna Paula
>

Olá,

Supondo que todas as colunas são número reais, pode-se ter uma
matriz de números reais com:

linhas_sem_barra_n = open('arquivo.txt').read().split('\n')[:-1]
matriz_s = [x.split(',') for x in linhas_sem_barra_n]
matriz_f = [[float(y) for y in x.split(',')] for x in linhas]

ou

linhas_com_barra_n = open('arquivo.txt').readlines()
matriz_s = [x[:-1].split(',') for x in linhas_com_barra_n]
matriz_f = [[float(y) for y in x[:-1].split(',')] for x in linhas]

Onde "open('arquivo.txt').read().split('\n')[:-1]", abre o
arquivo, lê o conteúdo, cria um vetor com as linha, ignora a última por
ser em branco. "open('arquivo.txt').readlines()", abre o arquivo e lê
linha a linha retornando-as na forma de vetor com '\n' no final, aí tem
que tirar esse '\n' quando for montar a matriz. Na segunda expressão,
para cada linha, separa as colunas separadas por ',', mas esta fica
sendo uma matriz de strings. Na terceira linha transforma em número real
cada valor, isto é, em cada linha em linhas, para cada coluna em linha,
converte em número real. Sinteticamente:

matriz_f = [[float(y) for y in x.split(',')] for x in
open('arquivo.txt').read().split('\n')[:-1]]
matriz_s = [x.split(',') for x in
open('arquivo.txt').read().split('\n')[:-1]]

ou

matriz_s = [x[:-1].split(',') for x in open('arquivo.txt').readlines()]
matriz_f = [[float(y) for y in x[:-1].split(',')] for x in
open('arquivo.txt').readlines()]

Para somar uma coluna partindo da matriz_f:

soma = sum(zip(*matriz_f)[coluna])

Se for partindo da matriz_s:

soma = sum([float(y) for y in zip(*matriz_f)[coluna]])


Agora veja qual processo atende melhor visto que tem milhares de
linhas.

[]'s
Junior Polegato

Carlos Ribeiro

unread,
Mar 25, 2010, 11:37:49 AM3/25/10
to python...@yahoogrupos.com.br
2010/3/25 Anna Paula Fagundes <ap.fa...@gmail.com>

> Oi luciano,


>
> obrigada pelo esclarecimento, mas em se tratando de colunas com milhares de
> números fica inviável fazer essa conversão número a número.
>
> Não existe uma função que possa selecionar a coluna toda e fazer a
> conversão
> dos números que estão nas linhas?
>

Existem formas simples e compactas de fazer esse tipo de coisa em Python. A
linguagem é MUITO flexível.

1) Você pode converter um a um na leitura (o que dá praticamente na mesma do
que o a linguagem fazer isso automaticamente, afinal, vc só está fazendo o
que o próprio interpretador do PHP ou do Javascript faz).

2) Você pode fazer uma passagem pelos dados dentro de uma lista usando uma
'list comprehension'. Fica elegante e compacto.

3) E finalmente, você pode sobrecarregar um operador (soma) para somar
strings como números, convertendo automaticamente. Não que isso seja
recomendado (neste caso não acho que seria) - apenas estou comentando para
você saber que tem como fazer.

--
Carlos Ribeiro
Consultoria em Projetos
twitter: http://twitter.com/carribeiro
blog: http://rascunhosrotos.blogspot.com
mail: carri...@gmail.com

Anna Paula Fagundes

unread,
Mar 25, 2010, 10:32:30 AM3/25/10
to python...@yahoogrupos.com.br
Oi Luciano,

consegui fazer da forma que eu estava querendo...

f=open('/teste.txt')
>>> for line in f:
... col=line.split(';')
... x=float(col[1])
... y=float(col[2])
... soma=x+y
... print soma

desta forma consegui somar os valores das colunas.

A grande questão estava nos meus números, onde os separadores decimais eram
',' e não '.'

de que qualquer forma obrigada pela atenção.

Att

Anna Paula


2010/3/25 Luciano Ramalho <ram...@gmail.com>

>
>
> 2010/3/25 Anna Paula Fagundes <ap.fa...@gmail.com<ap.fagundes%40gmail.com>


> >:
>
> > obrigada pelo esclarecimento, mas em se tratando de colunas com milhares
> de
> > números fica inviável fazer essa conversão número a número.
>
> Não é inviável. E além de ser viável, é o único jeito.
>
>
> > Não existe uma função que possa selecionar a coluna toda e fazer a
> conversão
> > dos números que estão nas linhas?
>
> Não.
>
>
> [ ]s
> Luciano
>
> --
> """
> O burocrata consegue transformar qualquer solução em um problema.
> """
>
>

[As partes desta mensagem que não continham texto foram removidas]

------------------------------------

Vinicius Franco do Nascimento

unread,
Mar 27, 2010, 8:14:01 PM3/27/10
to python...@yahoogrupos.com.br
Ana Paula,

Eu trabalho com processamento de informações, geralment oriundas de excel.
Eu exporto em CSV. O Separador de Valores padrão do Excel é ";"
O que eu faço é utilizar o módulo CSV do python, já embutido na
distribuição padrão (https://mail.google.com/mail/?shva=1&labs=0) e
separo as colunas em vetores.
Para trocar por valores é só da rum float ou int (valor).
Funciona bem e é bem simples.

Espero te ajudado.

2010/3/25 Anna Paula Fagundes <ap.fa...@gmail.com>:
> Oi Luciano,
>


--
Vinícius Franco do Nascimento


"Doing easily what others find difficult is talent; doing what is
impossible for talent is genius." -- Henri-Frederic Amiel

Anna Paula Fagundes

unread,
Apr 2, 2010, 2:53:04 PM4/2/10
to python...@yahoogrupos.com.br
Obrigada a todos! Acho que agora consigo fazer o que eu quero...

Att

Anna Paula


2010/3/27 Vinicius Franco do Nascimento <vinicius....@gmail.com>

>
>
> Ana Paula,
>
> Eu trabalho com processamento de informações, geralment oriundas de excel.
> Eu exporto em CSV. O Separador de Valores padrão do Excel é ";"
> O que eu faço é utilizar o módulo CSV do python, já embutido na
> distribuição padrão (https://mail.google.com/mail/?shva=1&labs=0) e
> separo as colunas em vetores.
> Para trocar por valores é só da rum float ou int (valor).
> Funciona bem e é bem simples.
>
> Espero te ajudado.
>
>

> 2010/3/25 Anna Paula Fagundes <ap.fa...@gmail.com<ap.fagundes%40gmail.com>


> >:
> > Oi Luciano,
> >
>
> --
> Vinícius Franco do Nascimento
>
> "Doing easily what others find difficult is talent; doing what is
> impossible for talent is genius." -- Henri-Frederic Amiel
>
>

[As partes desta mensagem que não continham texto foram removidas]

------------------------------------

Ricardo horaculo

unread,
Nov 4, 2013, 11:29:25 PM11/4/13
to python...@googlegroups.com, python...@yahoogrupos.com.br, ap.fa...@gmail.com

Boa madrugada a todos, ja aproveitando o bico  deste tópico, gostaria de saber como poderia somar  todos os numeros de uma coluna em um arquivo txt.

f = open('usuario.txt')

for line in f:
    col = line.split(",")
    x = float(col[0])
    y = float(col[1])
    soma = x + y
    print(soma)


sendo que usuario.txt fosse isso abaixo:
Preciso muito dessa informação! pls.

111,222
333,444
555,555
444,777
777,111
888,333
999,888

Obrigado a todos, venho acompanhando a lista de exercício do Python Brasil, e na parte de projetos. Seria muito bom  se alguém resolver e deixa pra consulta  tem muita informação ali que seria de altíssimo valor pra quem ta começando!

Helder

unread,
Nov 5, 2013, 5:13:30 AM11/5/13
to python...@googlegroups.com
Declare soma = 0, antes do laço "for".
Assim, quando o laço terminar, vc terá em "soma", o valor das colunas somadas.


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



--
Helder C. R. de Oliveira
http://helderc.net

Helder

unread,
Nov 5, 2013, 5:15:44 AM11/5/13
to python...@googlegroups.com
Desculpe, fui muito vago no email anterior.

A ideia é que vc declare soma antes do "for".
...
soma = 0
...

E depois, dentro do for, vc deve ter algo como:
...
soma += x
...

No final do for, dê um print no soma, e verá que a variavel possui todos os valores somados.


Em 5 de novembro de 2013 02:29, Ricardo horaculo <thorm...@gmail.com> escreveu:
--
--
------------------------------------
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.

Tadzio Buscácio

unread,
Nov 5, 2013, 2:34:22 PM11/5/13
to python...@googlegroups.com, python...@yahoogrupos.com.br, ap.fa...@gmail.com
na verdade só depende se você quer a somas individuais ou só o total.
with open('usuario.txt') as f:
    buf = f,read().split('\n')

somas = [sum(map(float,x.split(','))) for x in buf]
total = sum(somas)

Vanessa Teixeira

unread,
Jan 6, 2020, 9:30:24 PM1/6/20
to Python Brasil
Boa noite pessoal,

será q alguém poderia me dar uma ajuda?? Tenho muita dificuldade com programação e to com problema parecido.

Tenho um arquivo de texto com dezenas de colunas e milhares de linhas. Disso preciso fazer gráficos entre algumas colunas no matplotlib. Como q faz pra selecionar uma coluna inteira do arquivo?? Tem como isso? Parece algo simples, mas nem isso to conseguindo. Ah, e os números das colunas não estao separados por nenhum caracter, só espaço mesmo.

Obrigada.

Andre Fonseca

unread,
Jan 7, 2020, 10:56:39 AM1/7/20
to python...@googlegroups.com
Leitura em coluna não é uma coisa tão simples quanto parece pois a maioria das libs de file sempre vão seguir por linhas. Pensando aqui, o que pode fazer é carregar o arquivo e gerar uma matrix de dados em memoria e tentar manipular por ai.  Outra opção mais especifica é voce carregar esses dados num DataSet do pandas e usar a lib para fazer as coisa que precisa com colunas. 
 
Essas são as opções que tenho em mente nesse instante.  Vou ver se consigo mais alguma coisa e assim que tiver posto aqui na thread. 

Atenciosamente

--
----------------------
Andre Fonseca

Ouca meu podcast onde compartilho minha visão sobre alguns assuntos
Reply all
Reply to author
Forward
0 new messages