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}")