Files
pagodera/iconScript/tibiawiki/utils.py
T
Evandro Fonseca Junior 29ba5aece0 feat: add TibiaWiki scraper project and update .gitignore
Integrates a Scrapy-based TibiaWiki scraper (spider, pipelines, SQLite/Images settings, README). Updates .gitignore to exclude generated data directories (/iconScript/data, /data/images) to keep the repository clean.
2025-10-30 00:55:25 -03:00

99 lines
2.2 KiB
Python

"""
Funções utilitárias para normalização e formatação de dados
"""
import unicodedata
import re
def normalize_name(name):
"""
Normaliza nomes removendo acentos e substituindo espaços por underscores
Args:
name: Nome a ser normalizado
Returns:
str: Nome normalizado (lowercase, sem acentos, underscores no lugar de espaços)
Exemplos:
"Capacetes" -> "capacetes"
"Antigas Wands e Rods" -> "antigas_wands_rods"
"Calças" -> "calcas"
"""
if not name:
return ""
# Remove acentos
nfd = unicodedata.normalize('NFD', name)
name_no_accent = ''.join(c for c in nfd if unicodedata.category(c) != 'Mn')
# Converte para lowercase e substitui espaços por underscores
normalized = re.sub(r'[^a-z0-9]+', '_', name_no_accent.lower())
# Remove underscores do início e fim
return normalized.strip('_')
def parse_int(text):
"""
Extrai um inteiro de um texto, removendo caracteres não numéricos
Args:
text: Texto que pode conter números
Returns:
int ou None: Número extraído ou None se não encontrar
"""
if not text:
return None
# Remove tudo que não for dígito
numbers = re.sub(r'\D', '', str(text))
return int(numbers) if numbers else None
def parse_float(text):
"""
Extrai um float de um texto
Args:
text: Texto que pode conter números decimais
Returns:
float ou None: Número extraído ou None se não encontrar
"""
if not text:
return None
# Remove tudo exceto dígitos, ponto e vírgula
clean_text = re.sub(r'[^\d.,]', '', str(text))
# Substitui vírgula por ponto
clean_text = clean_text.replace(',', '.')
try:
return float(clean_text)
except ValueError:
return None
def clean_text(text):
"""
Limpa texto removendo espaços extras e quebras de linha
Args:
text: Texto a ser limpo
Returns:
str: Texto limpo
"""
if not text:
return ""
# Remove espaços extras e quebras de linha
cleaned = re.sub(r'\s+', ' ', str(text)).strip()
return cleaned