Python para Tratamento de Dados: Como Sanitizar Strings e Remover Diacríticos
Como Remover Acentos e Caracteres Especiais de um Texto em Python
Ao processar dados de formulários, criar slugs para URLs ou higienizar strings para armazenamento em bancos de dados, acentos e caracteres especiais podem causar inconsistências de busca e falhas de codificação. Este script utiliza o módulo nativo
unicodedata para decompor caracteres acentuados em seus componentes base, permitindo a remoção limpa dos diacríticos sem alterar as letras originais. A solução é ideal para padronizar textos e evitar problemas de encoding em sistemas de TI.Python
import re
import unicodedata
def remover_acentos_e_especiais(texto: str, manter_espacos: bool = True) -> str:
"""Remove acentos e caracteres especiais de uma string mantendo letras e números."""
if not texto:
return ""
# Normaliza a string decompondo caracteres acentuados (ex: 'á' vira 'a' + '´')
texto_normalizado = unicodedata.normalize("NFD", texto)
# Filtra os caracteres removendo os diacríticos (categoria 'Mn')
texto_sem_acento = "".join(
char for char in texto_normalizado
if unicodedata.category(char) != "Mn"
)
# Define o padrão Regex: mantém letras, números e opcionalmente espaços
padrao = r"[^a-zA-Z0-9\s]" if manter_espacos else r"[^a-zA-Z0-9]"
# Remove caracteres especiais restantes (símbolos, pontuações, etc.)
texto_limpo = re.sub(padrao, "", texto_sem_acento)
return texto_limpo
# --- Exemplo de uso prático ---
if __name__ == "__main__":
texto_sujo = "Atenção! O valor do produto é R$ 1.250,00 @2026 (São Paulo/SP)."
# 1. Removendo acentos e especiais, mas mantendo espaços
resultado_com_espacos = remover_acentos_e_especiais(texto_sujo, manter_espacos=True)
print("Texto sem acentos/especiais:", resultado_com_espacos)
# Saída: "Atencao O valor do produto e R 125000 2026 Sao PauloSP"
# 2. Gerando um slug limpo para URLs (sem espaços)
slug = remover_acentos_e_especiais(texto_sujo, manter_espacos=False).lower()
print("Slug gerado:", slug)
# Saída: "atencaovalordoprodutoer1250002026saopaulosp"
Pontos-chave
unicodedata.normalize("NFD", ...): Aplica a Decomposição Canônica Unicode, separando os caracteres base (como a letra "a") de seus diacríticos e acentos (como "˜").- Categoria
'Mn'(Mark, Nonspacing): O filtro identifica e descarta apenas os símbolos de acentuação desvinculados após a normalização NFD, preservando o caractere alfabético original. - Expressão Regular com
re.sub(): O padrão[^a-zA-Z0-9\s]garante a remoção de pontuações, pontuação ASCII e símbolos especiais (ex:@,$,!,/), mantendo a integridade de letras e números. - Performático e sem dependências externas: Por utilizar apenas as bibliotecas nativas
unicodedataere, o script possui custo de execução mínimo e roda em qualquer ambiente Python sem necessidade depip install.

Comentários
Postar um comentário