Alterar como mostro os eventos

This commit is contained in:
2025-11-09 21:50:06 -01:00
2 changed files with 48 additions and 14 deletions

View File

@@ -1,7 +1,6 @@
#! /usr/bin/env python #! /usr/bin/env python
# pyright: basic # pyright: basic
import json
import os import os
import pandas as pd import pandas as pd
@@ -18,6 +17,7 @@ MENU ="""[1] Criar a base de dados
[6] Guardar como JSON [6] Guardar como JSON
[7] Guardar como CSV [7] Guardar como CSV
[8] Estatísticas [8] Estatísticas
[9] Atualizar uma entrada de um evento
[Q] Sair [Q] Sair
""" """
@@ -35,7 +35,7 @@ def guardar_df(df: pd.DataFrame, fname: str) -> bool:
def guardar_json(df: pd.DataFrame, fname: str) -> bool: def guardar_json(df: pd.DataFrame, fname: str) -> bool:
with open(fname , "w") as fp: with open(fname , "w") as fp:
try: try:
json.dump(df.to_json(), fp) df.to_json(fp)
except: except:
return False return False
return True return True
@@ -67,7 +67,10 @@ def main():
if fname is None: if fname is None:
fname = "dados.txt" fname = "dados.txt"
if _file_exists(fname): if _file_exists(fname) and fname.endswith(".json"):
db = pd.read_json(fname)
print("Base de dados populada.")
elif _file_exists(fname):
db = parser.parse(fname) db = parser.parse(fname)
input("Base de dados populada. Enter para voltar ao menu inicial") input("Base de dados populada. Enter para voltar ao menu inicial")
else: else:
@@ -104,9 +107,17 @@ def main():
retInfo = "ID do event não encontrado!" retInfo = "ID do event não encontrado!"
else: else:
os.system("cls")
table = crud.get_table(db, eid_choice) table = crud.get_table(db, eid_choice)
_prettify_event(table)
crud.show_table(table) crud.show_table(table)
row_choice = _get_usr_input("Escolhe a linha a apagar:", int) row_choice = _get_usr_input("Escolhe a linha a apagar:", int)
# TODO: balizar a escolha para apenas as linhas do evento em questao
row_choice = _get_usr_input("Escolhe a linha a apagar:", int)
# TODO: balizar a escolha para apenas as linhas do evento em questao
row_choice = _get_usr_input("Escolhe a linha a apagar: ", int)
db = crud.delete_table_row(db, eid_choice, row_choice) db = crud.delete_table_row(db, eid_choice, row_choice)
new_table = crud.get_table(db, eid_choice) new_table = crud.get_table(db, eid_choice)
crud.show_table(new_table) crud.show_table(new_table)
@@ -156,6 +167,25 @@ def main():
else: else:
retInfo = "Base de dados não encontrada!" retInfo = "Base de dados não encontrada!"
case "9":
if db is not None:
crud.read_ids(db)
eid_choice = _get_usr_input("Escolhe o ID: ", int)
if not _event_exists(db, eid_choice):
retInfo = "ID do event não encontrado!"
else:
table = crud.get_table(db, eid_choice)
crud.show_table(table)
row_choice = _get_usr_input("Escolhe a linha a atualizar: ", int)
new_data = {}
for col in crud.TABLE_READ_RET:
val = _get_usr_input(f"Novo valor para {col} (Enter para manter o valor atual): ")
if val is not None:
new_data[col] = val
crud.update_table_row(db, row_choice, new_data)
case "q": case "q":
isRunning = False isRunning = False
continue continue
@@ -189,6 +219,15 @@ def _get_usr_input(msg:str, asType=str):
def _prettify_event(df): def _prettify_event(df):
preambleInfo = df.drop_duplicates(subset="ID", keep="first") preambleInfo = df.drop_duplicates(subset="ID", keep="first")
stations = df[["Estacao", "Componente", "Tipo Onda", "Amplitude"]] stations = df[["Estacao", "Componente", "Tipo Onda", "Amplitude"]]
info = df.drop_duplicates(subset="Data", keep="first")
stations = df[["Estacao", "Componente", "Tipo Onda", "Amplitude"]]
data = datetime.fromisoformat(info.Data.values[0]).strftime("%c")
print(f"Região: {info["Regiao"].values[0]}\nData: {data}\nLatitude: {info.Lat.values[0]}\nLongitude: {info.Long.values[0]}"
+ f"\nProfundidade: {info.Prof.values[0]}\nTipo de evento: {info['Tipo Ev'].values[0]}\n")
info = df.drop_duplicates(subset="Data", keep="first")
data = datetime.fromisoformat(info.Data.values[0]).strftime("%c")
print(f"Região: {info["Regiao"].values[0]}\nData: {data}\nLatitude: {info.Lat.values[0]}\nLongitude: {info.Long.values[0]}"
+ f"\nProfundidade: {info.Prof.values[0]}\nTipo de evento: {info['Tipo Ev'].values[0]}\n")
if __name__ == '__main__': if __name__ == '__main__':
main() main()

View File

@@ -61,16 +61,11 @@ def read_table_row(df, event_id, row_number_1):
info.append(f"{i+1} {col}: {row[col]}") info.append(f"{i+1} {col}: {row[col]}")
return f"Linha {row_number_1:02d} do evento {event_id}:\n" + "\n".join(info) return f"Linha {row_number_1:02d} do evento {event_id}:\n" + "\n".join(info)
def update_table_row(df, event_id, row_number_1, new_data): def update_table_row(df, row_line, new_data):
# atualiza uma linha específica da tabela do evento
row_number_0 = row_number_1 - 1
table = get_table(df, event_id)
if row_number_0 < 0 or row_number_0 >= len(table):
return f"Linha {row_number_1} não pertence ao evento {event_id}."
for key, value in new_data.items(): for key, value in new_data.items():
if key in table.columns: if key in df.columns:
df.loc[(df["ID"] == event_id) & (df.index == table.index[row_number_0]), key] = value df.loc[row_line, key] = value
return f"Linha {row_number_1} do evento {event_id} atualizada com sucesso." return f"Linha {row_line} do evento atualizada com sucesso."
def update_header(df, event_id, new_data): def update_header(df, event_id, new_data):
# atualiza o header de um evento # atualiza o header de um evento