Files
prog-team-proj/earthquakes.py
2025-11-08 16:30:24 -01:00

137 lines
3.4 KiB
Python

#! /usr/bin/env python
# pyright: basic
import json
import os
import pandas as pd
import parser
import crud
HEADER = """=== Terramotos ==="""
MENU ="""[1] Criar a base de dados
[2] Atualizar uma entrada
[3] Apagar uma entrada
[4] Visualizar uma entrada
[Q] Sair
"""
def guardar_df(df: pd.DataFrame, fname: str) -> bool:
with open(fname, "w") as fp:
fname = f"{fname}.txt"
try:
fp.write(df.to_string())
except ValueError:
return False
return True
def guardar_json(df: pd.DataFrame, fname: str) -> bool:
with open(fname , "w") as fp:
try:
json.dump(df.to_json(), fp)
except:
return False
return True
def guardar_csv(df: pd.DataFrame, fname: str):
with open(fname, "w") as fp:
try:
df.to_csv(fp, index=False)
except ValueError:
return False
return True
def main():
isRunning = True
db = parser.parse("dados.txt")
retInfo = None
while isRunning:
os.system("cls")
print(HEADER + "\n" + MENU)
usrIn = input("Opção: ").lower()
match usrIn:
case "1":
os.system("cls")
print(HEADER + "\nCRIAR")
fname = input("Nome do ficheiro com os dados. (Branco para dados.txt)")
if fname == "":
fname = "dados.txt"
if _file_exists(fname):
db = parser.parse(fname)
else:
retInfo = "Nenhum ficheiro encontrado!"
case "2":
if db is not None:
continue
else:
retInfo = "Base de dados não encontrada!"
case "3":
if db is not None:
a = _get_uniques(db)
ev_ids = _show_events(a)
_select = input("Qual a entrada a apagar: ")
db = db.drop(db[db["ID"] == ev_ids[_select]].index)
else:
retInfo = "Base de dados não encontrada!"
case "4":
if db is not None:
a = _get_uniques(db)
ev_ids = _show_events(a)
_select = input("Qual a entrada a visualizar: ")
_view_event(db, ev_ids[_select])
input()
else:
retInfo = "Base de dados não encontrada!"
case "q":
isRunning = False
continue
case _:
pass
if retInfo:
print(retInfo)
retInfo = None
input("Clique Enter para continuar")
def _file_exists(name: str) -> bool:
currFiles = os.listdir(os.getcwd())
if name in currFiles:
return True
return False
def _get_uniques(df) -> pd.DataFrame:
return df.get(["ID", "Data", "Regiao"]).drop_duplicates(subset="ID", keep="first")
def _show_events(df):
events = {}
idx = 1
for (_, row) in df.iterrows():
print(f"{idx:2d}| {row["Regiao"]}")
events[str(idx)] = row["ID"]
idx += 1
return events
def _view_event(df, id):
for idx, row in df.loc[df["ID"] == id ].iterrows():
print(row)
if __name__ == '__main__':
main()