Quebrando uma string e removendo espaços extras (Python)
Overview
Olá, entusiasta do Python! Já se viu enredado em dados desordenados, com strings cheias de espaços indesejados? Não tema! Neste post, vou mostrar como podemos simplificar sua vida com um truque ágil de Python. De adeus àquela abordagem de dois passos - dividindo strings e removendo espaços manualmente. Prepare-se para uma solução elegante e eficiente, economizando linhas de código e tempo. Vamos mergulhar nessa técnica e tornar seu código Python mais limpo e elegante!
Você recebe uma string que possui vários valores separados por vírgula (ou qualquer outro caractere), divide ela e fica com um vetor cheio de valores que podem ou não possuir um espaço antes ou depois da string. Nestes casos, você faz um segundo passo, que é remover os espaços de cada um dos valores do seu vetor. No exemplo deste post, vou mostrar como fazer estes dois passos de uma vez.
Se você está pensando que o segundo passo pode ser evitado apenas solicitando que o usuário não utilize espaços entre os valores, então você está delirando. Não confie na boa vontade ou memória do usuário. É sua responsabilidade garantir que os dados lidos estarão no formato que você precisa. (OK, pode não ser sua obrigação, mas é uma boa prática…)
Deixando a filosofia de lado, vamos ao exemplo prático…
Vamos demonstrar o problema:
#Variables...
foods = "bacon, meat, pork chop, landjaeger, hamburger"
food_arr = []
#Step00: Just to show the problem...
print(foods.split(","))
No código acima, quebramos a string e a transformamos em um vetor e jogamos este resultado na função print. Isso vai gerar o seguinte output:
['bacon', ' meat', ' pork chop', ' landjaeger', ' hamburger']
Salvo pelo primeiro item, os outros possuem espaços extras e precisamos remove-los.
O modo “demorado” de fazer estas operações seria assim:
#Variables...
foods = "bacon, meat, pork chop, landjaeger, hamburger"
food_arr = []
#Step00: Just to show the problem...
print("old:\t{0}".format(foods.split(",")))
#Step 01: Split the string.
for food in foods.split(","):
#Step 02: Removing extra spaces.
food_arr.append(food.strip())
#Final Step: Printing result...
print("new:\t{0}".format(food_arr))
No fonte acima, repetimos a demonstração do problema para conseguir compara-la com a resolução. O passo 01 é bem simples: quebrar a string (.split(",") e jogar o resultado em um for. O segundo passo é remover os espaços extras (.strip() e incluir o resultado desta remoção no vetor).
(Este exemplo está no meu GitHub)
Simples, certo? OK, são só 2 linhas de código, mas podemos reduzir isso para apenas 01 linha de código.
Agora vamos para o exemplo mais otimizado:
#Variables...
foods = "bacon, meat, pork chop, landjaeger, hamburger"
#Step00: Just to show the problem...
print("old:\t{0}".format(foods.split(",")))
#Step 01: Split the string and removes the spaces.
food_arr = [food.strip() for food in foods.split(',')]
#Final Step: Printing result...
print("new:\t{0}".format(food_arr))
Neste script, repetimos a demonstração do problema, mas resolvemos ele utilizado a list comprehension do Python. O que está sendo feito no passo 01 deste exemplo é o mesmo que foi feito nos passos 01 e 02 do exemplo anterior: A string está sendo transformada em um vetor e cada elemento deste vetor está sendo tratado (removendo os espaços extras). O retorno destas operações é um vetor (list), como é indicado pelos [] que estão em volta dos comandos.
(Este exemplo está no meu GitHub)
Espero ter ajudado.
Referência: