a1 b1 c1
a2 b2 c2
a3 b3 c3
a4 b4 c4
...
utilizando:
ln = l.split(' ')
Consigo posteriormente colocar cada ln[0], ln[1] e ln[2] em um loop para
criar as 3 listas.
Entretanto, o último campo está capturando a quebra de linha.
Como fazer para que isso não ocorra e o campo ln[2] não capture a quebra
de linha?
Obrigado
[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
2010/11/22 Zhu Sha Zang <zhush...@yahoo.com.br>
>
>
> Bom dia, lendo um arquivo texto onde cada linha possui três campos, como
> se formassem colunas, pretendo colocar cada campo em uma lista
> separada.Assim:
>
> a1 b1 c1
> a2 b2 c2
> a3 b3 c3
> a4 b4 c4
> ...
>
> utilizando:
>
> ln = l.split(' ')
>
> Consigo posteriormente colocar cada ln[0], ln[1] e ln[2] em um loop para
> criar as 3 listas.
>
> Entretanto, o último campo está capturando a quebra de linha.
>
> Como fazer para que isso não ocorra e o campo ln[2] não capture a quebra
> de linha?
>
> Obrigado
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
--
Fábio Cerqueira
No entanto, perceba que as linhas nesse caso já te servem para alguma
coisa: elas jpá sáo uam divisão logica dos sesus dados -- Você estaria
juntando tudo (sem a separação de linha) para depois juntar de novo.
Precisa de informação a mais para isso (a quantidade de tokens de
cada linha). Não que seja importante, e é igualemente factível - mas
eu considero que é complicar a coisa: deixar seus dados "amorfos" sem
necessidade.
Então, o melhor aí é justamente fazer um "split" nas quebras de linha
- no "\n", pra começar.
Ai, se tata de "desfazer" um "zip" ou seja, desintercalar dados.
Um jeito bastante legível de se faze-lo é:
>>> a = """a1 b1 c1
... a2 b2 c2
... a3 b3 c3
... a4 b4 c4"""
>>> final = []
>>> for linha in a.split("\n"):
... for i, token in enumerate(linha.split()):
... if len(final) <= i: final.append([])
... final[i].append(token)
...
>>> final
[['a1', 'a2', 'a3', 'a4'], ['b1', 'b2', 'b3', 'b4'], ['c1', 'c2', 'c3', 'c4']]
Note que coincidentemente "unzip" é o tema do último post no meu blog
de python avançado -
http://metapython.blogspot.com/2010/11/x-unzip-and-peeping-into-it.html
-
E como o RBP bem notou nos comentários, o "zip" pode ser usado como
Unzip: basta passar as tuplas com os dados intercalados, cada uma como
um parâmetro, para ele mesmo:
>>> a = """a1 b1 c1
... a2 b2 c2
... a3 b3 c3
... a4 b4 c4"""
>>> final = zip(*(c.split() for c in a.split("\n")) )
>>> final
[('a1', 'a2', 'a3', 'a4'), ('b1', 'b2', 'b3', 'b4'), ('c1', 'c2', 'c3', 'c4')]
Se sua cadeia de dados for longa do tipo que você pode ganhar alguma
coisa se puder ir consumindo os dados aos poucos, sem ter tudo na
memória, o post acima tem uma função que permite separar cada cadeia
de dados da stream em um generator ... mas acho qeu você não vai
precisar de tanto. :-)
js
-><-
O split quando não é passado o separador remove qualquer whitespace
2010/11/22 Joao S. O. Bueno <jsb...@python.org.br>
--
Fábio Cerqueira
[As partes desta mensagem que não continham texto foram removidas]
------------------------------------
Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.brLinks do Yahoo! Grupos
Olá,
Se cada campo é separado por exatamente um espaço e cada linha
terminada por '\n', eu faria uma matriz desse arquivo assim:
matriz = [linha.split(' ') for linha in
open('arquivo.dat').read().strip().split('\n')]
Na sua questão em específico, pode usar
ln = l.strip().split(' ')
Ou ainda, se tiver certeza do '\n', pode-se trocar o ".strip()"
por "[:-1]" em ambos os casos, fazendo com que se ignore o '\n' no final.
[]'s
Junior Polegato
------------------------------------
Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.brLinks do Yahoo! Grupos