199 lines
6.6 KiB
Python
199 lines
6.6 KiB
Python
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"./{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['8p'] = ''
|
|
df['9p'] = ''
|
|
df['10p'] = ''
|
|
|
|
df['1c'] = ''
|
|
df['2c'] = ''
|
|
df['3c'] = ''
|
|
df['4c'] = ''
|
|
df['5c'] = ''
|
|
df['6c'] = ''
|
|
df['7c'] = ''
|
|
df['8c'] = ''
|
|
df['9c'] = ''
|
|
df['10c'] = ''
|
|
|
|
|
|
|
|
|
|
|
|
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(10).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, '8p'] = df.at[proximas[7], 'NOME']
|
|
df.at[i, '9p'] = df.at[proximas[8], 'NOME']
|
|
df.at[i, '10p'] = df.at[proximas[9], '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.at[i, '8c'] = df.at[proximas[7], 'CODIGO']
|
|
df.at[i, '9c'] = df.at[proximas[8], 'CODIGO']
|
|
df.at[i, '10c'] = df.at[proximas[9], '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}") |