mudaças pré formatação do pc
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# Caminhos
|
||||
pasta_entrada = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\CONSULTA_ESTOQUE"
|
||||
pasta_saida = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\SUPRIMENTOS\ANALISE_ESTOQUE"
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Lista de subpastas
|
||||
subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]
|
||||
|
||||
df_list = []
|
||||
|
||||
for subpasta in subpastas:
|
||||
arquivos = [f for f in os.listdir(subpasta) if f.endswith(".csv")]
|
||||
nome_pasta = os.path.basename(subpasta)
|
||||
|
||||
try:
|
||||
parte_final = nome_pasta.split('_')[-1]
|
||||
data_estoque = pd.to_datetime(parte_final[:8], format="%Y%m%d", errors='coerce')
|
||||
except Exception:
|
||||
data_estoque = pd.NaT
|
||||
|
||||
for arquivo in arquivos:
|
||||
caminho_arquivo = os.path.join(subpasta, arquivo)
|
||||
try:
|
||||
df = pd.read_csv(caminho_arquivo, encoding="utf-8", low_memory=False)
|
||||
df["Arquivo_Origem"] = arquivo
|
||||
df["Pasta_Origem"] = nome_pasta
|
||||
df["data_estoque"] = data_estoque
|
||||
df_list.append(df)
|
||||
except Exception as e:
|
||||
print(f"Erro ao ler o arquivo {arquivo}: {e}")
|
||||
|
||||
# Unifica os dados
|
||||
if df_list:
|
||||
df_final = pd.concat(df_list, ignore_index=True)
|
||||
|
||||
# Corrige e filtra datas
|
||||
df_final["data_estoque"] = pd.to_datetime(df_final["data_estoque"], errors="coerce")
|
||||
df_final = df_final.dropna(subset=["data_estoque"])
|
||||
|
||||
# (Opcional) Remover duplicatas completas (linhas idênticas)
|
||||
df_final = df_final.drop_duplicates()
|
||||
|
||||
# Salvar como Parquet
|
||||
caminho_saida = os.path.join(pasta_saida, "ESTOQUE_UNIFICADO.parquet")
|
||||
df_final.to_parquet(caminho_saida, index=False)
|
||||
print(f"✅ Arquivo Parquet salvo com sucesso em:\n{caminho_saida}")
|
||||
else:
|
||||
print("⚠️ Nenhum arquivo CSV foi encontrado para processar.")
|
||||
@@ -0,0 +1,71 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# Caminhos
|
||||
pasta_entrada = r"..\CONSULTA_ESTOQUE"
|
||||
pasta_saida = r"..\SUPRIMENTOS\ANALISE_ESTOQUE\ESTOQUE_UNIFICADO_PDV24"
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Lista subpastas
|
||||
subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]
|
||||
|
||||
df_list = []
|
||||
|
||||
for subpasta in subpastas:
|
||||
arquivos = [f for f in os.listdir(subpasta) if f.endswith(".csv")]
|
||||
nome_pasta = os.path.basename(subpasta)
|
||||
|
||||
try:
|
||||
parte_final = nome_pasta.split('_')[-1]
|
||||
data_estoque = pd.to_datetime(parte_final[:8], format="%Y%m%d", errors='coerce')
|
||||
except Exception:
|
||||
data_estoque = pd.NaT
|
||||
|
||||
for arquivo in arquivos:
|
||||
caminho_arquivo = os.path.join(subpasta, arquivo)
|
||||
try:
|
||||
df = pd.read_csv(caminho_arquivo, encoding="utf-8", low_memory=False)
|
||||
|
||||
# Filtrar apenas as colunas desejadas
|
||||
colunas_desejadas = ["SKU", "SKU_PARA", "PDV", "ESTOQUE ATUAL", "DDV PREVISTO", "DESCRIÇÃO", "CATEGORIA"]
|
||||
colunas_existentes = [col for col in colunas_desejadas if col in df.columns]
|
||||
|
||||
df = df[colunas_existentes].copy()
|
||||
|
||||
# Filtro PDV que começa com 24
|
||||
df = df[df["PDV"].astype(str).str.startswith("24")]
|
||||
|
||||
df["Arquivo_Origem"] = arquivo
|
||||
df["Pasta_Origem"] = nome_pasta
|
||||
df["data_estoque"] = data_estoque
|
||||
df_list.append(df)
|
||||
except Exception as e:
|
||||
print(f"Erro ao ler o arquivo {arquivo}: {e}")
|
||||
|
||||
# Consolidar e salvar o último estoque de junho
|
||||
if df_list:
|
||||
df_final = pd.concat(df_list, ignore_index=True)
|
||||
df_final["data_estoque"] = pd.to_datetime(df_final["data_estoque"], errors="coerce")
|
||||
df_final = df_final.dropna(subset=["data_estoque"])
|
||||
|
||||
# Filtrar anos 2024 e 2025 e apenas mês de junho
|
||||
df_junho = df_final[
|
||||
(df_final["data_estoque"].dt.year.isin([2025])) &
|
||||
(df_final["data_estoque"].dt.month == 6)
|
||||
].copy()
|
||||
|
||||
# Pegar o último dia de junho de cada ano
|
||||
df_junho["ano"] = df_junho["data_estoque"].dt.year
|
||||
ultimos_junho = df_junho.groupby("ano")["data_estoque"].max().reset_index()
|
||||
|
||||
# Filtrar apenas os registros do último dia de junho de cada ano
|
||||
df_filtrado = df_junho.merge(ultimos_junho, on=["ano", "data_estoque"])
|
||||
|
||||
# Salvar resultado
|
||||
caminho_saida = os.path.join(pasta_saida, "ESTOQUE_PDV24_ULTIMO_JUNHO.parquet")
|
||||
df_filtrado.to_parquet(caminho_saida, index=False)
|
||||
|
||||
print("✅ Arquivo Parquet salvo com sucesso!")
|
||||
print("📅 Últimos estoques de junho por ano incluídos:")
|
||||
for d in ultimos_junho["data_estoque"]:
|
||||
print(f" - {d.strftime('%d/%m/%Y')}")
|
||||
@@ -0,0 +1,78 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# === AJUSTE AQUI CONFORME O NOME REAL DA PASTA ===
|
||||
pasta_entrada = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\CONSULTA_ESTOQUE"
|
||||
pasta_saida = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\SUPRIMENTOS\ANALISE_ESTOQUE\ESTOQUE_UNIFICADO"
|
||||
|
||||
# Cria a pasta de saída se ela não existir
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Verifica se a pasta de entrada existe
|
||||
if not os.path.exists(pasta_entrada):
|
||||
raise FileNotFoundError(f"A pasta de entrada não foi encontrada: {pasta_entrada}")
|
||||
|
||||
# Lista todas as subpastas dentro da pasta de entrada
|
||||
subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]
|
||||
|
||||
df_list = []
|
||||
|
||||
for subpasta in subpastas:
|
||||
arquivos = [f for f in os.listdir(subpasta) if f.endswith(".csv")]
|
||||
nome_pasta = os.path.basename(subpasta)
|
||||
|
||||
# Extração da data a partir do nome da pasta (última parte, 8 primeiros dígitos)
|
||||
try:
|
||||
parte_final = nome_pasta.split('_')[-1] # ex: '20250627090744'
|
||||
data_estoque = pd.to_datetime(parte_final[:8], format="%Y%m%d", errors='coerce') # ex: '20250627'
|
||||
except Exception as e:
|
||||
print(f"Erro ao extrair data da pasta '{nome_pasta}': {e}")
|
||||
data_estoque = pd.NaT
|
||||
|
||||
print(f"Data extraída da pasta '{nome_pasta}': {data_estoque}")
|
||||
|
||||
for arquivo in arquivos:
|
||||
caminho_arquivo = os.path.join(subpasta, arquivo)
|
||||
try:
|
||||
df = pd.read_csv(caminho_arquivo, encoding="utf-8", low_memory=False)
|
||||
df["Arquivo_Origem"] = arquivo
|
||||
df["Pasta_Origem"] = nome_pasta
|
||||
df["data_estoque"] = data_estoque
|
||||
df_list.append(df)
|
||||
except Exception as e:
|
||||
print(f"Erro ao ler o arquivo {arquivo}: {e}")
|
||||
|
||||
# Unifica todos os arquivos
|
||||
if df_list:
|
||||
df_final = pd.concat(df_list, ignore_index=True)
|
||||
|
||||
print("\nColunas disponíveis:", df_final.columns.tolist())
|
||||
|
||||
# Confirma se a coluna de data foi criada corretamente
|
||||
if "data_estoque" not in df_final.columns:
|
||||
raise ValueError("A coluna 'data_estoque' não foi encontrada nos dados.")
|
||||
|
||||
# Garante que está no formato datetime e remove registros sem data
|
||||
df_final["data_estoque"] = pd.to_datetime(df_final["data_estoque"], errors="coerce")
|
||||
df_final = df_final.dropna(subset=["data_estoque"])
|
||||
|
||||
# Agrupa por ano e mês
|
||||
df_final["AnoMes"] = df_final["data_estoque"].dt.to_period("M")
|
||||
|
||||
# Identifica a 1ª e a última data de cada mês
|
||||
datas_extremas = df_final.groupby("AnoMes")["data_estoque"].agg(["min", "max"]).reset_index()
|
||||
datas_extremas = datas_extremas.melt(id_vars="AnoMes", value_name="data_estoque").drop(columns="variable")
|
||||
|
||||
# Mantém apenas registros das datas mínima e máxima
|
||||
df_filtrado = df_final.merge(datas_extremas, on=["AnoMes", "data_estoque"], how="inner")
|
||||
|
||||
# Salva o arquivo final em CSV
|
||||
caminho_saida_csv = os.path.join(pasta_saida, "ESTOQUE_UNIFICADO_FILTRADO.csv")
|
||||
df_filtrado.to_csv(caminho_saida_csv, index=False, encoding="utf-8")
|
||||
|
||||
# Salva o arquivo final em Parquet
|
||||
caminho_saida_parquet = os.path.join(pasta_saida, "ESTOQUE_UNIFICADO_FILTRADO.parquet")
|
||||
df_filtrado.to_parquet(caminho_saida_parquet, index=False)
|
||||
|
||||
print(f"\n✅ Arquivo unificado e filtrado salvo com sucesso em:\n{caminho_saida_csv}")
|
||||
print(f"✅ Arquivo também salvo no formato Parquet em:\n{caminho_saida_parquet}")
|
||||
@@ -0,0 +1,44 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# Caminho onde estão as subpastas com os arquivos CSV
|
||||
pasta_entrada = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\SUPRIMENTOS\ANALISE ESTOQUE\ESTOQUE"
|
||||
|
||||
# Caminho da pasta de saída
|
||||
pasta_saida = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\SUPRIMENTOS\ANALISE ESTOQUE\ESTOQUE_UNIFICADO"
|
||||
|
||||
# Garante que a pasta de saída existe
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Lista todas as subpastas dentro de "ESTOQUE"
|
||||
subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]
|
||||
|
||||
df_list = []
|
||||
|
||||
# Percorre todas as subpastas
|
||||
for subpasta in subpastas:
|
||||
arquivos = [f for f in os.listdir(subpasta) if f.endswith(".csv")]
|
||||
nome_pasta = os.path.basename(subpasta) # Obtém o nome da pasta
|
||||
|
||||
for arquivo in arquivos:
|
||||
caminho_arquivo = os.path.join(subpasta, arquivo)
|
||||
try:
|
||||
df = pd.read_csv(caminho_arquivo, encoding="utf-8", low_memory=False) # Melhor para grandes volumes de dados
|
||||
df["Arquivo_Origem"] = arquivo # Adiciona o nome do arquivo de origem
|
||||
df["Pasta_Origem"] = nome_pasta # Adiciona o nome da pasta de origem
|
||||
df_list.append(df)
|
||||
except Exception as e:
|
||||
print(f"Erro ao ler o arquivo {arquivo}: {e}")
|
||||
|
||||
if df_list:
|
||||
df_final = pd.concat(df_list, ignore_index=True)
|
||||
|
||||
# Caminho do arquivo unificado na pasta de saída
|
||||
caminho_saida = os.path.join(pasta_saida, "ESTOQUE_UNIFICADO.csv")
|
||||
df_final.to_csv(caminho_saida, index=False, encoding="utf-8")
|
||||
|
||||
print(f"Arquivo unificado salvo em: {caminho_saida}")
|
||||
else:
|
||||
print("Nenhum arquivo pôde ser processado.")
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
def extrair_vendas(data_ini: int, data_fim: int, token: str, pasta_destino: str):
|
||||
"""
|
||||
Extrai vendas da API com base no período especificado e salva no formato Parquet.
|
||||
|
||||
Parâmetros:
|
||||
data_ini (int): Timestamp inicial (milissegundos desde 1970-01-01).
|
||||
data_fim (int): Timestamp final (milissegundos desde 1970-01-01).
|
||||
token (str): Bearer token para autenticação.
|
||||
pasta_destino (str): Diretório onde o arquivo Parquet será salvo.
|
||||
"""
|
||||
|
||||
url = "https://api.conexaonfe.com.br/v1/relatorios"
|
||||
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
|
||||
|
||||
payload = {
|
||||
"ids": [],
|
||||
"entidade": "NFCE_EMITIDA_RELATORIO",
|
||||
"tipo": "normal",
|
||||
"dataIni": data_ini,
|
||||
"dataFim": data_fim,
|
||||
"destinatarios": [],
|
||||
"erpAtualizado": None,
|
||||
"estabs": [],
|
||||
"filialClientes": None,
|
||||
"informacoesNoRelatorio": "AVANCADO_E_ITENS",
|
||||
"nomArqDownload": "",
|
||||
"statusEmitida": None,
|
||||
"tags": [],
|
||||
"tipoDataConsiderar": "DATA_EMISSAO",
|
||||
"tipoFiltroMarcador": "CONTEM",
|
||||
"tipoNota": None,
|
||||
"valorAte": None,
|
||||
"valorDe": None
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=payload, timeout=30)
|
||||
|
||||
if response.status_code == 200:
|
||||
dados_vendas = response.json()
|
||||
|
||||
if not dados_vendas:
|
||||
print("⚠️ Nenhuma venda encontrada no período.")
|
||||
return
|
||||
|
||||
os.makedirs(pasta_destino, exist_ok=True) # Criar a pasta, se não existir
|
||||
|
||||
df = pd.DataFrame(dados_vendas)
|
||||
arquivo_parquet = os.path.join(pasta_destino, f"vendas_{data_ini}_{data_fim}.parquet")
|
||||
|
||||
df.to_parquet(arquivo_parquet, index=False)
|
||||
print(f"✅ Vendas extraídas e salvas em: {arquivo_parquet}")
|
||||
|
||||
else:
|
||||
print(f"❌ Erro {response.status_code}: {response.text}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"⚠️ Erro de conexão: {e}")
|
||||
|
||||
# 🔽 Exemplo de Uso
|
||||
token = "SEU_BEARER_TOKEN"
|
||||
data_ini = 1740798000000 # Substituir pelo timestamp correto
|
||||
data_fim = 1743390000000 # Substituir pelo timestamp correto
|
||||
pasta_destino = r"C:\Users\andressa.rocha\Documents\HITORICO_VENDAS"
|
||||
|
||||
extrair_vendas(data_ini, data_fim, token, pasta_destino)
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# Caminhos
|
||||
#pasta_entrada = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\CONSULTA_ESTOQUE"
|
||||
pasta_entrada = r"..\CONSULTA_ESTOQUE"
|
||||
|
||||
#pasta_saida = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\SUPRIMENTOS\ANALISE_ESTOQUE\ESTOQUE_UNIFCADO_MES"
|
||||
pasta_saida = r"..\SUPRIMENTOS\ANALISE_ESTOQUE\ESTOQUE_UNIFCADO_MES"
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Lista subpastas
|
||||
subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]
|
||||
|
||||
df_list = []
|
||||
|
||||
for subpasta in subpastas:
|
||||
arquivos = [f for f in os.listdir(subpasta) if f.endswith(".csv")]
|
||||
nome_pasta = os.path.basename(subpasta)
|
||||
|
||||
try:
|
||||
parte_final = nome_pasta.split('_')[-1]
|
||||
data_estoque = pd.to_datetime(parte_final[:8], format="%Y%m%d", errors='coerce')
|
||||
except Exception:
|
||||
data_estoque = pd.NaT
|
||||
|
||||
for arquivo in arquivos:
|
||||
caminho_arquivo = os.path.join(subpasta, arquivo)
|
||||
try:
|
||||
df = pd.read_csv(caminho_arquivo, encoding="utf-8", low_memory=False)
|
||||
df["Arquivo_Origem"] = arquivo
|
||||
df["Pasta_Origem"] = nome_pasta
|
||||
df["data_estoque"] = data_estoque
|
||||
df_list.append(df)
|
||||
except Exception as e:
|
||||
print(f"Erro ao ler o arquivo {arquivo}: {e}")
|
||||
|
||||
# Filtrar e salvar o estoque do último dia do mês anterior + máximo dia do mês atual
|
||||
if df_list:
|
||||
df_final = pd.concat(df_list, ignore_index=True)
|
||||
df_final["data_estoque"] = pd.to_datetime(df_final["data_estoque"], errors="coerce")
|
||||
df_final = df_final.dropna(subset=["data_estoque"])
|
||||
|
||||
# Data máxima disponível
|
||||
data_max = df_final["data_estoque"].max()
|
||||
|
||||
# Identifica mês atual e anterior
|
||||
mes_atual = data_max.to_period("M")
|
||||
mes_anterior = (data_max - pd.DateOffset(months=1)).to_period("M")
|
||||
|
||||
# Último dia do mês anterior
|
||||
ult_dia_mes_ant = df_final[df_final["data_estoque"].dt.to_period("M") == mes_anterior]["data_estoque"].max()
|
||||
|
||||
# Último dia disponível no mês atual
|
||||
ult_dia_mes_atual = data_max
|
||||
|
||||
# Filtra apenas esses dois dias
|
||||
df_filtrado = df_final[df_final["data_estoque"].isin([ult_dia_mes_ant, ult_dia_mes_atual])]
|
||||
|
||||
caminho_saida = os.path.join(pasta_saida, "ESTOQUE_UNIFICADO.parquet")
|
||||
df_filtrado.to_parquet(caminho_saida, index=False)
|
||||
#df_filtrado.to_csv(f'{pasta_saida}/estoque.csv', index=False)
|
||||
|
||||
# Impressão final das datas filtradas
|
||||
print("✅ Arquivo Parquet salvo com sucesso!")
|
||||
print("📅 Datas incluídas no arquivo:")
|
||||
print(f" - Último dia do mês anterior: {ult_dia_mes_ant.strftime('%d/%m/%Y')}")
|
||||
print(f" - Último dia disponível do mês atual: {ult_dia_mes_atual.strftime('%d/%m/%Y')}")
|
||||
|
||||
else:
|
||||
print("⚠️ Nenhum arquivo CSV foi encontrado para processar.")
|
||||
@@ -0,0 +1,46 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# Caminhos
|
||||
pasta_entrada = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\CONSULTA_ESTOQUE"
|
||||
pasta_saida = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\SUPRIMENTOS\ANALISE_ESTOQUE"
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Lista subpastas
|
||||
subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]
|
||||
|
||||
df_list = []
|
||||
|
||||
for subpasta in subpastas:
|
||||
arquivos = [f for f in os.listdir(subpasta) if f.endswith(".csv")]
|
||||
nome_pasta = os.path.basename(subpasta)
|
||||
|
||||
try:
|
||||
parte_final = nome_pasta.split('_')[-1]
|
||||
data_estoque = pd.to_datetime(parte_final[:8], format="%Y%m%d", errors='coerce')
|
||||
except Exception:
|
||||
data_estoque = pd.NaT
|
||||
|
||||
for arquivo in arquivos:
|
||||
caminho_arquivo = os.path.join(subpasta, arquivo)
|
||||
try:
|
||||
df = pd.read_csv(caminho_arquivo, encoding="utf-8", low_memory=False)
|
||||
df["Arquivo_Origem"] = arquivo
|
||||
df["Pasta_Origem"] = nome_pasta
|
||||
df["data_estoque"] = data_estoque
|
||||
df_list.append(df)
|
||||
except Exception as e:
|
||||
print(f"Erro ao ler o arquivo {arquivo}: {e}")
|
||||
|
||||
# Unifica e salva
|
||||
if df_list:
|
||||
df_final = pd.concat(df_list, ignore_index=True)
|
||||
df_final["data_estoque"] = pd.to_datetime(df_final["data_estoque"], errors="coerce")
|
||||
df_final = df_final.dropna(subset=["data_estoque"])
|
||||
df_final = df_final.drop_duplicates(subset=["data_estoque"])
|
||||
|
||||
caminho_saida = os.path.join(pasta_saida, "ESTOQUE_UNIFICADO.parquet")
|
||||
df_final.to_parquet(caminho_saida, index=False)
|
||||
print(f"✅ Arquivo Parquet salvo com sucesso em:\n{caminho_saida}")
|
||||
else:
|
||||
print("⚠️ Nenhum arquivo CSV foi encontrado para processar.")
|
||||
@@ -0,0 +1,46 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# Caminhos
|
||||
pasta_entrada = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\CONSULTA_ESTOQUE"
|
||||
pasta_saida = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\SUPRIMENTOS\ANALISE_ESTOQUE"
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Lista subpastas
|
||||
subpastas = [os.path.join(pasta_entrada, d) for d in os.listdir(pasta_entrada) if os.path.isdir(os.path.join(pasta_entrada, d))]
|
||||
|
||||
df_list = []
|
||||
|
||||
for subpasta in subpastas:
|
||||
arquivos = [f for f in os.listdir(subpasta) if f.endswith(".csv")]
|
||||
nome_pasta = os.path.basename(subpasta)
|
||||
|
||||
try:
|
||||
parte_final = nome_pasta.split('_')[-1]
|
||||
data_estoque = pd.to_datetime(parte_final[:8], format="%Y%m%d", errors='coerce')
|
||||
except Exception:
|
||||
data_estoque = pd.NaT
|
||||
|
||||
for arquivo in arquivos:
|
||||
caminho_arquivo = os.path.join(subpasta, arquivo)
|
||||
try:
|
||||
df = pd.read_csv(caminho_arquivo, encoding="utf-8", low_memory=False)
|
||||
df["Arquivo_Origem"] = arquivo
|
||||
df["Pasta_Origem"] = nome_pasta
|
||||
df["data_estoque"] = data_estoque
|
||||
df_list.append(df)
|
||||
except Exception as e:
|
||||
print(f"Erro ao ler o arquivo {arquivo}: {e}")
|
||||
|
||||
# Unifica e salva
|
||||
if df_list:
|
||||
df_final = pd.concat(df_list, ignore_index=True)
|
||||
df_final["data_estoque"] = pd.to_datetime(df_final["data_estoque"], errors="coerce")
|
||||
df_final = df_final.dropna(subset=["data_estoque"])
|
||||
df_final = df_final.drop_duplicates(subset=["data_estoque"])
|
||||
|
||||
caminho_saida = os.path.join(pasta_saida, "ESTOQUE_UNIFICADO.parquet")
|
||||
df_final.to_parquet(caminho_saida, index=False)
|
||||
print(f"✅ Arquivo Parquet salvo com sucesso em:\n{caminho_saida}")
|
||||
else:
|
||||
print("⚠️ Nenhum arquivo CSV foi encontrado para processar.")
|
||||
@@ -0,0 +1,43 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# Defina os caminhos
|
||||
pasta_entrada = r"C:\Users\andressa.rocha\Downloads\meta pef"
|
||||
pasta_saida = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\SUPRIMENTOS\REUNIÕES\CONSELHO\06 - JUNHO\DADOS JUNHO\METAPEF"
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Lista todos os arquivos .xlsx
|
||||
arquivos_xlsx = []
|
||||
for raiz, dirs, arquivos in os.walk(pasta_entrada):
|
||||
for arquivo in arquivos:
|
||||
if arquivo.endswith(".xlsx"):
|
||||
arquivos_xlsx.append(os.path.join(raiz, arquivo))
|
||||
|
||||
# Unificar arquivos da segunda aba
|
||||
df_list = []
|
||||
|
||||
for arquivo in arquivos_xlsx:
|
||||
try:
|
||||
# Lê o nome da segunda aba
|
||||
abas = pd.ExcelFile(arquivo, engine='openpyxl').sheet_names
|
||||
if len(abas) >= 2:
|
||||
segunda_aba = abas[1]
|
||||
df = pd.read_excel(arquivo, sheet_name=segunda_aba, engine='openpyxl')
|
||||
df["Arquivo_Origem"] = os.path.basename(arquivo)
|
||||
df_list.append(df)
|
||||
else:
|
||||
print(f"⚠️ O arquivo {arquivo} não possui uma segunda aba.")
|
||||
except Exception as e:
|
||||
print(f"Erro ao ler o arquivo {arquivo}: {e}")
|
||||
|
||||
# Concatenar e salvar em parquet
|
||||
if df_list:
|
||||
df_final = pd.concat(df_list, ignore_index=True)
|
||||
df_final = df_final.astype(str) # Converte todas as colunas para string
|
||||
caminho_saida = os.path.join(pasta_saida, "METAPEF.parquet")
|
||||
df_final.to_parquet(caminho_saida, index=False)
|
||||
print("✅ Arquivo Parquet salvo com sucesso!")
|
||||
print(f"📂 Total de arquivos unificados: {len(df_list)}")
|
||||
else:
|
||||
print("⚠️ Nenhum dado foi processado a partir da segunda aba dos arquivos.")
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# Defina os caminhos
|
||||
pasta_entrada = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\SUPRIMENTOS\ANALISE_ESTOQUE\TABELA DE PREÇO"
|
||||
pasta_saida = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\Indicadores_Melhoria\Acompanhamento_Indicadores_Sup\TABELADEPREÇO"
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Lista todos os arquivos .xlsx (pode ser recursivo se quiser)
|
||||
arquivos_xlsx = []
|
||||
for raiz, dirs, arquivos in os.walk(pasta_entrada):
|
||||
for arquivo in arquivos:
|
||||
if arquivo.endswith(".xlsx"):
|
||||
arquivos_xlsx.append(os.path.join(raiz, arquivo))
|
||||
|
||||
# Unificar arquivos
|
||||
df_list = []
|
||||
|
||||
for arquivo in arquivos_xlsx:
|
||||
try:
|
||||
df = pd.read_excel(arquivo)
|
||||
df["Arquivo_Origem"] = os.path.basename(arquivo)
|
||||
df_list.append(df)
|
||||
except Exception as e:
|
||||
print(f"Erro ao ler o arquivo {arquivo}: {e}")
|
||||
|
||||
# Concatenar e salvar em parquet
|
||||
if df_list:
|
||||
df_final = pd.concat(df_list, ignore_index=True)
|
||||
caminho_saida = os.path.join(pasta_saida, "TABELADEPREÇO.parquet")
|
||||
df_final.to_parquet(caminho_saida, index=False)
|
||||
|
||||
print("✅ Arquivo Parquet salvo com sucesso!")
|
||||
print(f"📂 Total de arquivos unificados: {len(arquivos_xlsx)}")
|
||||
else:
|
||||
print("⚠️ Nenhum arquivo XLSX encontrado para processar.")
|
||||
@@ -0,0 +1,42 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
# Caminhos
|
||||
pasta_entrada = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\Indicadores_Melhoria\Acompanhamento_Indicadores_Sup\RUPTURA\MAR"
|
||||
pasta_saida = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\Indicadores_Melhoria\Acompanhamento_Indicadores_Sup\RUPTURA\RUPTURA_2025"
|
||||
|
||||
# Lista para armazenar os DataFrames
|
||||
dfs = []
|
||||
|
||||
# Iterar pelos arquivos na pasta
|
||||
for nome_arquivo in os.listdir(pasta_entrada):
|
||||
if nome_arquivo.endswith(".csv"):
|
||||
caminho_arquivo = os.path.join(pasta_entrada, nome_arquivo)
|
||||
|
||||
# Leitura do CSV
|
||||
df = pd.read_csv(caminho_arquivo, sep=None, engine='python') # Detecta separador automaticamente
|
||||
|
||||
# Obter data de modificação do arquivo
|
||||
timestamp = os.path.getmtime(caminho_arquivo)
|
||||
data_modificacao = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d')
|
||||
|
||||
# Adiciona coluna com data da última atualização
|
||||
df["data_ultima_atualizacao"] = data_modificacao
|
||||
|
||||
# Adiciona à lista
|
||||
dfs.append(df)
|
||||
|
||||
# Unir todos os DataFrames
|
||||
df_unificado = pd.concat(dfs, ignore_index=True)
|
||||
|
||||
# Garantir que a pasta de saída existe
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Caminho do arquivo de saída
|
||||
arquivo_saida = os.path.join(pasta_saida, "ruptura_unificada_2025.parquet")
|
||||
|
||||
# Salvar em formato Parquet
|
||||
df_unificado.to_parquet(arquivo_saida, index=False)
|
||||
|
||||
print("Arquivo Parquet gerado com sucesso:", arquivo_saida)
|
||||
@@ -0,0 +1,89 @@
|
||||
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):
|
||||
@@ -0,0 +1,73 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
# Defina os caminhos
|
||||
pasta_entrada = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\Indicadores_Melhoria\OTIF\RECEBIMENTO"
|
||||
pasta_saida = r"C:\Users\andressa.rocha\OneDrive - GRUPO GINSENG\2025\Indicadores_Melhoria\OTIF\Recebimento_Calamo"
|
||||
os.makedirs(pasta_saida, exist_ok=True)
|
||||
|
||||
# Lista todos os arquivos .csv
|
||||
arquivos_csv = []
|
||||
for raiz, dirs, arquivos in os.walk(pasta_entrada):
|
||||
for arquivo in arquivos:
|
||||
if arquivo.endswith(".csv"):
|
||||
arquivos_csv.append(os.path.join(raiz, arquivo))
|
||||
|
||||
# Mapeamento de colunas
|
||||
mapeamento_colunas = {
|
||||
"textbox25": "Fornecedor",
|
||||
"textbox27": "Documento",
|
||||
"textbox5": "Cod.Produto",
|
||||
"textbox7": "Descricao",
|
||||
"textbox4": "Preco_Unit",
|
||||
"textbox9": "Quantidade",
|
||||
"textbox3": "Preco_Total"
|
||||
}
|
||||
|
||||
# Unificar arquivos
|
||||
df_list = []
|
||||
|
||||
for arquivo in arquivos_csv:
|
||||
try:
|
||||
df = pd.read_csv(arquivo, skiprows=2) # Ignorar as 2 primeiras linhas
|
||||
|
||||
# Filtrar apenas as colunas necessárias que existem no arquivo
|
||||
colunas_para_pegar = [col for col in mapeamento_colunas.keys() if col in df.columns]
|
||||
|
||||
df = df[colunas_para_pegar].rename(columns=mapeamento_colunas)
|
||||
|
||||
df["Arquivo_Origem"] = os.path.basename(arquivo)
|
||||
df_list.append(df)
|
||||
except Exception as e:
|
||||
print(f"Erro ao ler o arquivo {arquivo}: {e}")
|
||||
|
||||
# Concatenar e salvar em parquet
|
||||
if df_list:
|
||||
df_final = pd.concat(df_list, ignore_index=True)
|
||||
|
||||
# ➡️ NOVA ETAPA: separar parte antes do primeiro '-'
|
||||
df_final["NumeroNF"] = df_final["Documento"].astype(str).str.split('-').str[0]
|
||||
df_final["NumeroNF"] = df_final["NumeroNF"].astype(str).str.split(': ').str[1]
|
||||
|
||||
# ➡️ NOVA ETAPA DATA: separar parte antes do primeiro '-'
|
||||
df_final["Documento_Data"] = df_final["Documento"].astype(str).str.split('DATA: ').str[1]
|
||||
df_final["Documento_Data"] = df_final["Documento_Data"].astype(str).str.split(' ').str[0]
|
||||
|
||||
df_final = df_final.drop(columns='Documento')
|
||||
|
||||
caminho_saida = os.path.join(pasta_saida, "recebimento.parquet")
|
||||
df_final.to_parquet(caminho_saida, index=False)
|
||||
|
||||
print("✅ Arquivo Parquet salvo com sucesso!")
|
||||
print(f"📂 Total de arquivos unificados: {len(arquivos_csv)}")
|
||||
|
||||
# Mostrar as colunas do DataFrame final
|
||||
print("\n🖨️ Colunas do DataFrame final:")
|
||||
print(df_final.columns.tolist())
|
||||
|
||||
# Mostrar exemplo das 5 primeiras linhas
|
||||
print("\n🖨️ Exemplo do resultado final:")
|
||||
print(df_final.head())
|
||||
|
||||
else:
|
||||
print("⚠️ Nenhum arquivo CSV encontrado para processar.")
|
||||
Reference in New Issue
Block a user