59 lines
1.5 KiB
Python
59 lines
1.5 KiB
Python
import logging
|
|
from io import TextIOWrapper
|
|
|
|
from utilsv2 import utils
|
|
from utilsv2.log import logger
|
|
from utilsv2.nordic import parse as n_parse
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def read_file(fname: str) -> TextIOWrapper | OSError:
|
|
try:
|
|
fp = open(fname, "r", newline="\n")
|
|
return fp
|
|
except FileNotFoundError:
|
|
return FileNotFoundError("Nenhum ficheiro encontrado")
|
|
except PermissionError:
|
|
return PermissionError("Sem permissões para abrir")
|
|
|
|
|
|
def find_events(fp: TextIOWrapper) -> list[tuple[int, int]]:
|
|
event_indices = []
|
|
|
|
event_start = -1
|
|
idx = 0
|
|
for line in fp.read().split("\n"):
|
|
if event_start == -1:
|
|
event_start = idx
|
|
if utils.is_empty(line):
|
|
event_indices.append((event_start, idx))
|
|
event_start = -1
|
|
idx += 1
|
|
|
|
logger.info("Found %d events", len(event_indices))
|
|
return event_indices
|
|
|
|
|
|
def extract_event(fp: TextIOWrapper, event_bounds: list[tuple[int, int]]):
|
|
lines = fp.read().split("\n")
|
|
print(len(lines))
|
|
print(event_bounds)
|
|
|
|
for event_idx in event_bounds:
|
|
n_parse(lines[event_idx[0] : event_idx[1]])
|
|
|
|
|
|
def parse(fname: str) -> None:
|
|
_ret = read_file(fname)
|
|
if not isinstance(_ret, TextIOWrapper):
|
|
logger.critical(_ret.__str__())
|
|
raise _ret
|
|
|
|
events = find_events(_ret)
|
|
_ret.seek(0)
|
|
extract_event(_ret, events)
|
|
|
|
# cleanup
|
|
_ret.close()
|