import os import pandas as pd import numpy as np from time import sleep def deletar_arquivo_gerado(): print("deltando arquivo...") diretorio = 'data' # nome da pasta principal pastas = listar_pastas(diretorio) for pasta in pastas: print(f"Encontrada pasta: {pasta}") output_csv = f"./{pasta}.csv" deletar_arquivo(output_csv) def deletar_arquivo(caminho_arquivo): try: os.remove(caminho_arquivo) print(f"Arquivo {caminho_arquivo} deletado com sucesso.") except FileNotFoundError: print(f"O arquivo {caminho_arquivo} não foi encontrado.") except PermissionError: print(f"Sem permissão para deletar o arquivo {caminho_arquivo}.") except Exception as e: print(f"Ocorreu um erro ao tentar deletar o arquivo {caminho_arquivo}: {e}") def carregar_arquivo(): print("Carregando arquivo...") diretorio = 'data' # nome da pasta principal pastas = listar_pastas(diretorio) for pasta in pastas: print(f"Encontrada pasta: {pasta}") # Chamar a função diretorio = f"./data/{pasta}/dados" print(diretorio) output_csv = f"./00{pasta}_dados.csv" processar_arquivos_txt(diretorio, output_csv) def listar_pastas(diretorio): pastas = [nome for nome in os.listdir(diretorio) if os.path.isdir(os.path.join(diretorio, nome))] return pastas def carregar_arquivoxls_mais_proxima(): print("Carregando arquivo...") diretorio = 'data' # nome da pasta principal pastas = listar_pastas(diretorio) for pasta in pastas: print(f"Encontrada pasta: {pasta}") diretorio = f"./data/{pasta}/{pasta}.xls" output_csv = f"./proxima_{pasta}.csv" processar_arquivos_xls(diretorio, output_csv) print(output_csv) sleep(3) processar_arquivos_xls2(output_csv) # Função para calcular a distância euclidiana def calcular_distancia(lat1, lon1, lat2, lon2): return np.sqrt((lat1 - lat2) ** 2 + (lon1 - lon2) ** 2) def processar_arquivos_xls(arquivo, output_csv): db = pd.read_excel(arquivo, decimal='.') db.columns = db.columns.str.strip() df = pd.DataFrame() # Verificar a existência das colunas antes de acessar if 'CODIGO' in db.columns and 'LATITUDE' in db.columns and 'LONGITUDE' in db.columns and 'NOME' in db.columns: df['CODIGO'] = db['CODIGO'] df['LATITUDE'] = db['LATITUDE'] df['LONGITUDE'] = db['LONGITUDE'] df['NOME'] = db['NOME'] else: print("Uma ou mais colunas esperadas não estão presentes no DataFrame.") df.to_csv(output_csv, sep=";", encoding='utf-8', decimal=',', index=False) def processar_arquivos_xls2(output_csv): df = pd.read_csv(output_csv, encoding='utf-8', sep=';', decimal=',') df['1p'] = '' df['2p'] = '' df['3p'] = '' df['4p'] = '' df['5p'] = '' df['6p'] = '' df['7p'] = '' df['1c'] = '' df['2c'] = '' df['3c'] = '' df['4c'] = '' df['5c'] = '' df['6c'] = '' df['7c'] = '' df['LATITUDE'] = pd.to_numeric(df['LATITUDE'], errors='coerce') df['LONGITUDE'] = pd.to_numeric(df['LONGITUDE'], errors='coerce') # Iterar sobre cada linha para encontrar as três estações mais próximas for i, row in df.iterrows(): lat1, lon1 = row['LATITUDE'], row['LONGITUDE'] distancias = df.apply(lambda x: calcular_distancia(lat1, lon1, x['LATITUDE'], x['LONGITUDE']), axis=1) distancias[i] = np.inf # Excluir a própria estação proximas = distancias.nsmallest(7).index # Pegar os índices das três menores distâncias************ df.at[i, '1p'] = df.at[proximas[0], 'NOME'] df.at[i, '2p'] = df.at[proximas[1], 'NOME'] df.at[i, '3p'] = df.at[proximas[2], 'NOME'] df.at[i, '4p'] = df.at[proximas[3], 'NOME'] df.at[i, '5p'] = df.at[proximas[4], 'NOME'] df.at[i, '6p'] = df.at[proximas[5], 'NOME'] df.at[i, '7p'] = df.at[proximas[6], 'NOME'] df.at[i, '1c'] = df.at[proximas[0], 'CODIGO'] df.at[i, '2c'] = df.at[proximas[1], 'CODIGO'] df.at[i, '3c'] = df.at[proximas[2], 'CODIGO'] df.at[i, '4c'] = df.at[proximas[3], 'CODIGO'] df.at[i, '5c'] = df.at[proximas[4], 'CODIGO'] df.at[i, '6c'] = df.at[proximas[5], 'CODIGO'] df.at[i, '7c'] = df.at[proximas[6], 'CODIGO'] df.to_csv(output_csv, sep=";", encoding='utf-8', decimal=',', index=False) def processar_arquivos_txt(diretorio, output_csv): # Lista para armazenar os DataFrames lista_dfs = [] # Percorrer todos os arquivos no diretório for arquivo in os.listdir(diretorio): if arquivo.endswith(".txt"): # Caminho completo do arquivo caminho_arquivo = os.path.join(diretorio, arquivo) # Nome do código a partir do nome do arquivo (sem a extensão .txt) codigo = arquivo.split('.')[0] print(f"Processando arquivo: {codigo}") # Leitura do arquivo txt df = pd.read_csv(caminho_arquivo, delim_whitespace=True, header=None) # Renomear colunas df.columns = ['Dia', 'Mes', 'Ano', 'Valor'] # Criar coluna de data a partir das colunas Dia, Mes, Ano df['Data'] = pd.to_datetime(df['Ano'].astype(str) + '-' + df['Mes'].astype(str) + '-' + df['Dia'].astype(str), errors='coerce') df = df.drop(columns=['Dia', 'Mes', 'Ano']) # Selecionar colunas necessárias e adicionar a coluna Código df_final = df[['Data', 'Valor']].copy() df_final['Codigo'] = codigo # Reordenar as colunas df_final = df_final[['Codigo', 'Data', 'Valor']] # Adicionar o DataFrame processado à lista lista_dfs.append(df_final) # Concatenar todos os DataFrames em um único DataFrame df_resultado = pd.concat(lista_dfs, ignore_index=True) # Salvar o DataFrame em um arquivo CSV df_resultado.columns = df_resultado.columns.str.upper() df_resultado.to_csv(output_csv, index=False, sep=";", decimal=",") print(f"Dados salvos em {output_csv}")