Ruptura_Projetada/CODIGO PY/UNIFICAR_TABELA_PEDIDO.py
2025-10-24 15:54:54 -03:00

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):