Métodos de string: limpando e transformando texto
Um cadastro que recebe ' MARIA silva ' de um formulário e guarda exatamente assim, com espaços e maiúsculas trocadas, vira um problema na hora de comparar ou exibir esse nome depois.
Estudar esta lição interativa →Um formulário de cadastro real recebe texto digitado por pessoas, e pessoas digitam de formas inconsistentes: espaços extras no início, tudo em maiúsculas, tudo em minúsculas. Se o seu programa guardar " MARIA silva " exatamente assim, comparar esse nome com "Maria Silva" mais tarde vai falhar, mesmo sendo, para uma pessoa, obviamente o mesmo nome. Strings em Python vêm com métodos prontos exatamente para esse tipo de limpeza.
cidade = " são paulo "
print(cidade.strip())
print(cidade.strip().lower())
print(cidade.strip().upper())
print(cidade.strip().title())strip() remove espaços das pontas; title() deixa a primeira letra de cada palavra maiúscula.
.strip() remove espaços em branco (e quebras de linha) do início e do fim do texto, sem tocar nos espaços do meio. .lower() e .upper() convertem tudo para minúsculas ou maiúsculas. .title() deixa a primeira letra de cada palavra maiúscula, útil para exibir nomes formatados.
Pense nesses métodos como ferramentas de uma caixa de ferramentas: cada uma resolve um trabalho específico. Você não usa uma chave de fenda para apertar um parafuso sextavado; da mesma forma, não usa .replace() quando o que você precisa é só remover espaços com .strip().
Dois métodos a mais valem a pena: .find("termo") devolve a posição (índice) onde o termo aparece pela primeira vez, ou -1 se não encontrar nada; .replace("velho", "novo") devolve uma cópia do texto com todas as ocorrências trocadas.
frase = "o gato subiu no telhado"
print(frase.find("subiu"))
print(frase.find("cachorro"))
print(frase.replace("gato", "cachorro"))Como cada método de string devolve uma nova string, dá para encadear vários numa linha só: nome.strip().title() remove espaços e já formata em seguida, numa única expressão, lida da esquerda para a direita.
Um erro clássico é chamar nome.upper() numa linha solta e esperar que nome tenha mudado. Isso não gera erro nenhum, mas também não muda nada: strings são imutáveis em Python, então os métodos que transformam o texto devolvem uma string nova, sem alterar a original (outros métodos devolvem outro tipo: .find() devolve um int e .split(), uma lista). Se você quer guardar o resultado, precisa reatribuir explicitamente: nome = nome.upper(). Sem essa reatribuição, é um bug silencioso, sem mensagem de erro para avisar.
O .title() capitaliza toda palavra, sem exceção: "maria da silva".title() vira "Maria Da Silva" (o "da" deveria ficar minúsculo) e um apóstrofo também inicia uma palavra nova ("d'água".title() vira "D'Água"). Para exibir títulos simples serve; para nomes de pessoas, revise o resultado.
cidade = " curitiba "
cidade.strip().title()
print(cidade)Reatribua o resultado de .strip().title() a cidade.