Files
jean_app/carregar.py
2025-06-01 16:44:49 -03:00

196 lines
6.5 KiB
Python
Executable File

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
if not os.path.exists(diretorio): # Verifica se a pasta existe
print("Erro: A pasta 'data' não existe. Verifique e tente novamente.")
return # Encerra a função
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"./{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...")
print("TEM QUE ABRIR O ARQUIVOB E VERIFICAS AS COORDENADAS...")
diretorio = 'data' # nome da pasta principal
destino= "11estacaoproxima"
if not os.path.exists(destino):
os.makedirs(destino)
print(f"Pasta '{destino}' criada.")
pastas = listar_pastas(diretorio)
for pasta in pastas:
print(f"Encontrada pasta: {pasta}")
diretorio = f"./data/{pasta}/{pasta}.xls"
output_csv = f"./{destino}/proxima_{pasta}.csv"
processar_arquivos_xls(diretorio, output_csv)
print(output_csv)
sleep(3)
processar_arquivos_xls10(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='.') #LENDO PONTO
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_xls10(output_csv):
df = pd.read_csv(output_csv, encoding='utf-8', sep=';', decimal='.')
# Criar dinamicamente as colunas de nomes e códigos
# Verificar quantas estações únicas existem
codigos_unicos = df['CODIGO'].dropna().unique()
qtd_estacoes = len(codigos_unicos)
# Se tiver mais de 10 estações únicas, limitar a 10
QTD = min(qtd_estacoes, 10)
print(f"Estações únicas encontradas: {qtd_estacoes}")
print(f"QTD definido para análise de vizinhança: {QTD}")
for i in range(1, QTD ):
df[f'{i}p'] = ''
df[f'{i}c'] = ''
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(QTD).index # Pegar os índices das três menores distâncias************
for j in range(QTD):
df.at[i, f'{j+1}p'] = str(df.at[proximas[j], 'NOME'])
df.at[i, f'{j+1}c'] = str(int(df.at[proximas[j], '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 = []
destino= "01processados"
if not os.path.exists(destino):
os.makedirs(destino)
print(f"Pasta '{destino}' criada.")
# 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()
output_csv = os.path.join(destino, output_csv)
df_resultado.to_csv(output_csv, index=False, sep=";", decimal=",")
print(f"Dados salvos em {output_csv}")