90 lines
3.4 KiB
Python
90 lines
3.4 KiB
Python
import pandas as pd
|
|
import os
|
|
import re
|
|
|
|
# Caminhos (ajuste aqui conforme necessário)
|
|
pasta_entrada = r"C:\Users\andressa.rocha\Downloads\preço venda eud"
|
|
pasta_saida = r"C:\Users\andressa.rocha\Downloads" # corrigi "CC:\..." para "C:\..."
|
|
|
|
tabelas = []
|
|
|
|
print(f"\n📂 Buscando arquivos .xlsx em: {pasta_entrada}\n")
|
|
|
|
for raiz, subpastas, arquivos in os.walk(pasta_entrada):
|
|
for arquivo in arquivos:
|
|
if arquivo.endswith(".xlsx") and not arquivo.startswith("~$"):
|
|
caminho_arquivo = os.path.join(raiz, arquivo)
|
|
try:
|
|
df = pd.read_excel(caminho_arquivo, engine="openpyxl")
|
|
if df.empty:
|
|
print(f"⚠️ Ignorado (vazio): {arquivo}")
|
|
continue
|
|
df["Arquivo_Origem"] = arquivo
|
|
tabelas.append(df)
|
|
print(f"✅ Lido: {caminho_arquivo}")
|
|
except Exception as e:
|
|
print(f"❌ Erro ao ler {caminho_arquivo}: {e}")
|
|
|
|
if not tabelas:
|
|
print("\n⚠️ Nenhum arquivo Excel válido foi processado.")
|
|
else:
|
|
df_unificado = pd.concat(tabelas, ignore_index=True)
|
|
|
|
# Identificar coluna de região dinamicamente (agora lidando com nomes não-string)
|
|
col_regiao = None
|
|
for col in df_unificado.columns:
|
|
if pd.isna(col):
|
|
continue
|
|
col_str = str(col)
|
|
col_lower = col_str.lower().replace('ã', 'a').replace('á','a').replace('à','a').replace('â','a').replace('ä','a')
|
|
if 'regiao' in col_lower or 'região' in col_lower:
|
|
col_regiao = col
|
|
break
|
|
|
|
if col_regiao is None:
|
|
print("⚠️ Coluna de região não encontrada! Nenhum filtro será aplicado.")
|
|
else:
|
|
# garantir que coluna exista e converter para string seguro
|
|
df_unificado[col_regiao] = df_unificado[col_regiao].astype(str).str.strip().str.upper()
|
|
df_unificado = df_unificado[df_unificado[col_regiao] == 'NNE']
|
|
|
|
# Criar coluna 'Campanha' com valor fixo (ajuste se quiser)
|
|
df_unificado["Campanha"] = "Campanha 1"
|
|
|
|
# Função para classificar 'Tipo_Campanha' (trata se coluna não existir)
|
|
def classificar_tipo_promo(texto):
|
|
if pd.isna(texto) or str(texto).strip() == '':
|
|
return "promoção"
|
|
texto = str(texto).lower()
|
|
padrao = r"^(lanc|lanç|lançamento|lancamento)"
|
|
if re.search(padrao, texto):
|
|
return "lançamento"
|
|
return "promoção"
|
|
|
|
# Aplicar com segurança caso a coluna exista; se não existir, cria a coluna com "promoção"
|
|
coluna_tipo_promocao = None
|
|
for col in df_unificado.columns:
|
|
if pd.isna(col):
|
|
continue
|
|
if 'tipo' in str(col).lower() and 'promo' in str(col).lower():
|
|
coluna_tipo_promocao = col
|
|
break
|
|
|
|
if coluna_tipo_promocao:
|
|
df_unificado["Tipo_Campanha"] = df_unificado[coluna_tipo_promocao].apply(classificar_tipo_promo)
|
|
else:
|
|
print("⚠️ Coluna 'Tipo de promoção' não encontrada. Todas classificadas como 'promoção'.")
|
|
df_unificado["Tipo_Campanha"] = "promoção"
|
|
|
|
# --- ETAPA NOVA: Expansão por Canal ---
|
|
mapeamento_canal = {
|
|
"Loja": ["LOJA", "VD", "CD"],
|
|
"Ecomm": ["Ecomn", "CD"], # mantive seu mapeamento original; ajuste se quiser "Ecomm"
|
|
"VD": ["VD", "CD"],
|
|
"Loja | VD": ["LOJA", "VD", "CD"],
|
|
"Loja |Ecomn": ["LOJA", "VD", "CD"],
|
|
"Todos": ["LOJA", "VD", "CD"],
|
|
}
|
|
|
|
def canais_para_promocoes(valor):
|