[python-brasil] Lendo dados de um arquivo .txt

69 views
Skip to first unread message

waleria_antunes

unread,
Oct 4, 2010, 9:23:39 AM10/4/10
to python...@yahoogrupos.com.br
Olá pessoal,

Preciso ler um arquivo .txt, onde possuo 4 colunas mais preciso ler a partir da 2 coluna, porém esta me retornando o erro seguinte:

Traceback (most recent call last):
File "C:\dados.py", line 25, in <module>
x = numpy.loadtxt('C:\dados.txt')[:0]
File "C:\EPD\lib\site-packages\numpy\lib\io.py", line 630, in loadtxt
X.append(tuple([conv(val) for (conv, val) in zip(converters, vals)]))
ValueError: invalid literal for float(): 1993ah

Vejam meu código: http://pastebin.com/6TmsiPkm


O meu arquivo .txt ...possui essa estrutura: http://pastebin.com/wjiyRV80

Alguém pode me ajudar?

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

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


Dilan Nery

unread,
Oct 4, 2010, 3:46:52 PM10/4/10
to python...@yahoogrupos.com.br
Pelo que entendi da mensagem de erro, o numpy tenta converter '1993ah' para
um float, mas não consegue pois tem os caracteres 'ah' no final. Por isso o
erro: "ValueError: invalid literal for float(): 1993ah"

2010/10/4 waleria_antunes <no_r...@yahoogrupos.com.br>

>
>
> Olá pessoal,
>
> Preciso ler um arquivo .txt, onde possuo 4 colunas mais preciso ler a
> partir da 2 coluna, porém esta me retornando o erro seguinte:
>
> Traceback (most recent call last):
> File "C:\dados.py", line 25, in <module>
> x = numpy.loadtxt('C:\dados.txt')[:0]
> File "C:\EPD\lib\site-packages\numpy\lib\io.py", line 630, in loadtxt
> X.append(tuple([conv(val) for (conv, val) in zip(converters, vals)]))
> ValueError: invalid literal for float(): 1993ah
>
> Vejam meu código: http://pastebin.com/6TmsiPkm
>
> O meu arquivo .txt ...possui essa estrutura: http://pastebin.com/wjiyRV80
>
> Alguém pode me ajudar?
>
>
>

--
Warmest regards,
Dilan Nery - @dilannery


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

Fabiano Santana

unread,
Oct 4, 2010, 3:54:46 PM10/4/10
to python...@yahoogrupos.com.br
O erro está acontecendo porque o programa está interpretando '1993ah' como
um dado float.
Não sei mexer com numpy mas talvez exista alguma maneira de você fazer com
que ela interprete
isso como string e então, posteriormente, você pode descarta esse dado,
posto que você não deseja
ler a primeira coluna. Certamente há procedimentos mais elegante que esse.

Você pode tentar isso:
### inicio ###
def Ler(arquivo):
arq = open(arquivo,"r")
linhas = []
linha = True # apenas para inicial
while(True): # 'quebrará' quando ler todas as linhas
linha = arq.readline()
if(linha):
linha = linha.split("\t") # deve ser modificado para o tipo de separador de
colunas no arquivo
linha = linha[1:] # retira a primeira coluna
linha[-1] = linha[-1][:-1] # para retinar o '\n' do final
linhas.append(linha)
else: break
arq.close()
return linhas

print Ler("teste.txt")
### fim ###

O resultado, para o exemplo, será:
[['0.028488', '35.3355510594', '0.226143925635'], ['0.050043',
'36.6754415683', '0.167114251513'], ['0.052926', '36.8168806729',
'0.155866408242']]
Ou seja, um lista de listas de string (feio).

Em 4 de outubro de 2010 10:23, waleria_antunes
<no_r...@yahoogrupos.com.br>escreveu:

>
>
> Olá pessoal,
>
> Preciso ler um arquivo .txt, onde possuo 4 colunas mais preciso ler a
> partir da 2 coluna, porém esta me retornando o erro seguinte:
>
> Traceback (most recent call last):
> File "C:\dados.py", line 25, in <module>
> x = numpy.loadtxt('C:\dados.txt')[:0]
> File "C:\EPD\lib\site-packages\numpy\lib\io.py", line 630, in loadtxt
> X.append(tuple([conv(val) for (conv, val) in zip(converters, vals)]))
> ValueError: invalid literal for float(): 1993ah
>
> Vejam meu código: http://pastebin.com/6TmsiPkm
>
> O meu arquivo .txt ...possui essa estrutura: http://pastebin.com/wjiyRV80
>
> Alguém pode me ajudar?
>
>
>

--
Att,
Fabiano A. S. Santana
Bacharelando em Ciência da Computação
Universidade Federal do Tocantins
+55 63 9241 6342


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

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

Vinicius Franco do Nascimento

unread,
Oct 4, 2010, 6:25:22 PM10/4/10
to python...@yahoogrupos.com.br
Meu caro,

Acredito que seria melhor você trabalhar com o CSV.
é simples e prático. Procure sobre a documentação do módulo.
Assim você poderá fazer um check antes de carregar os dados.

Um abraço,


Vinícius Franco do Nascimento


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


2010/10/4 Fabiano Santana <fassan...@gmail.com>

waleria_antunes

unread,
Oct 5, 2010, 8:35:17 AM10/5/10
to python...@yahoogrupos.com.br
Bom, resolvi esse problema, no entanto apareceu um outro, agora me retorna esse erro: http://pastebin.com/eTq8npJU

Meu código: http://pastebin.com/dCwRnN2D

O que pode ser?

--- Em python...@yahoogrupos.com.br, Fabiano Santana <fassantanaatm@...> escreveu

Reply all
Reply to author
Forward
0 new messages