Pesquisar este blog

Carregando...

10 de novembro de 2008

Transformando string delimitada em uma lista

Outro dia eu recebi uma mensagem que tinha um monte de gente copiada. Daí eu pensei: "eu podia pegar esse monte de e-mails e transformar numa lista, né?"

Então esse é o meu exercício de hoje: pegar uma string delimitada e transformar numa lista.

É claro que podem existir várias formas de fazer isso, mas eu gostaria da ajuda de vocês para escolher a maneira mais pythônica de fazer isso.

Para dar um toque de realidade, eu resolvi ler o monte de e-mails de um arquivo texto e carregar a tal lista. Lembre-se que em uma linha do arquivo, existirão vários endereços de e-mail delimitados por um ponto-e-vírgula.

Segue abaixo o modo como eu resolvi esse problema:


'''Transforma string delimitada em lista'''

print __doc__
f = open('emails.txt')

emails = []
for linha in f:
emails.extend(email.lower().strip() for \
email in linha.split(';'))
f.close()

emails.sort()
for email in emails:
print email


Será que esse é realmente o melhor modo de resolver essa questão?
A misturada de coisa que eu fiz nas linhas 8 e 9 é uma boa forma de fazer um list comprehension?
E o encadeamento dos métodos lower() e strip() ficaram bons?

Particularmente, me pareceu um pouco javânico e perlínico!
Em python seria essa a forma aconselhável de fazer? Ou será que criei um monstrinho?

Sugestão do Elcio Ferreira em 13/11/2008: http://pastie.org/314379
De todas as sugestões que recebi, eu achei essa do Elcio a forma mais compacta de resolver esse problema. Apesar de achá-la um pouco complicada para iniciantes, eu a escolhi por ter vários conceitos em tão pouco código.
Eu consegui ver como um código pode ser pequeno pode abrir e ler um arquivo tranformando-o em uma string (read()). Como também pode transformar uma string em lista (t.replace("\n",";").split(";")). Gostei também da forma de mostrar a lista: print "\n".join(sorted(emails))

Adicionado em 16/11/2008: Apesar de eu ter escolhido essa alternativa, veja o que rolou nessa thread na lista Python Brasil. Principalmente se você é iniciante. A contribuição do Osvaldo Santana me fez abrir a cabeça para alguns detalhes que eu não havia previsto. A do Paul Eipper mostrou que meu exemplo também poderia ser mais resumido um pouco.
Obrigado pela ajuda de vocês. O newbie aqui tá aproveitando prá caramba! ;-)


Me ajuda aí.

Contribua se você tem alguma informação adicional sobre esse assunto ou se encontrou um erro nesse programa. Afinal, ninguém é perfeito, né?
Comente também se esse exemplo ajudou a você de alguma forma. É gratificante saber. :-)
Não deixe de avisar se você encontrou alguma falha de iniciante que precisa corrigir ou melhorar, pois estou aprendendo. Isso ajuda bastante.

Abraço.

Vinicius Assef (viniciusban arroba gmail ponto com) é desenvolvedor de software há 26 anos e escolheu Python para ser mais produtivo e mais feliz na profissão. Também é tradutor técnico, palestrante, gosta muito de open source e de padrões web. Pratica Lean e acredita em Deus.


3 comentários:

  1. Antes de mais nada a idéia de pegar problemas 'reais' da lista é fenomenal, assim nunca vai faltar assunto para aulas, e assuntos pertinentes, boa sacada!

    Por vezes a solução aparece na lista mas a descrição dos detalhes posta aqui completa o que na lista dificultaria para um iniciante, valeu cara, se achar uma sugestão melhor envio!

    ResponderExcluir
  2. Segue minha versão:

    http://pastie.org/314379

    ResponderExcluir
  3. Então.. gostaria de mudar o tópico aqui, liás, já usei o código em questão.. :) obrigado. Você sabe de alguma lib para fazer conexão com o Oracle? Tentei o cx_Oracle, mas não tive sucesso. Uso windows. Abração.

    ResponderExcluir

Marcadores