import re from dataclasses import dataclass # para correr o codigo usar o python 3.10+ @dataclass class Pessoa: nome: str pai: str mae: str obs: str @dataclass class Processo: ano: int mes: int dia: int pessoa: Pessoa data: dict[str, list[Processo]] = {} def freq_ano(): dict_freq = dict() for folder in data.values(): for proc in folder: dict_freq.setdefault(proc.ano, 0) dict_freq[proc.ano] += 1 return dict_freq def top5_nome_apelido(): freq_nome: dict[str,int] = dict() freq_apelido : dict[str,int] = dict() na_regex = re.compile(r"(\w+) (\w+ )*(\w+)") for folder in data.values(): for proc in folder: na_pessoa = na_regex.match(proc.pessoa.nome) na_pai = na_regex.match(proc.pessoa.pai) na_mae = na_regex.match(proc.pessoa.mae) if na_pessoa: freq_nome.setdefault(na_pessoa.group(1), 0) freq_nome[na_pessoa.group(1)] += 1 freq_apelido.setdefault(na_pessoa.group(2), 0) freq_apelido[na_pessoa.group(2)] += 1 if na_pai: freq_nome.setdefault(na_pai.group(1), 0) freq_nome[na_pai.group(1)] += 1 freq_apelido.setdefault(na_pai.group(2), 0) freq_apelido[na_pai.group(2)] += 1 if na_mae: freq_nome.setdefault(na_mae.group(1), 0) freq_nome[na_mae.group(1)] += 1 freq_apelido.setdefault(na_mae.group(2), 0) freq_apelido[na_mae.group(2)] += 1 top_nome = sorted(freq_nome.items(), key=lambda x: -x[1])[:5] top_apelido = sorted(freq_apelido.items(), key=lambda x: -x[1])[:5] return (top_nome, top_apelido) def print_freq_ano(freq_ano: dict[int, int]): print("Ano - Freq") for k, v in sorted(freq_ano.items()): print(f"{k} - {v}") def print_top5_nome_apelido(freqs: tuple): print("Top 5 nomes") for k, v in freqs[0]: print(f"{k} : {v}") print("\nTop 5 apelidos") for k, v in freqs[1]: print(f"{k} : {v}") def parseFile(filename): casos_erro = 0 f = open(filename, "r") all_regex = re.compile( r"(\d+)::(\d{4})-(\d{2})-(\d{2})::([a-zA-Z ]+)::([a-zA-Z ]*)::([a-zA-Z ]*)::(.*)::" ) for line in f.readlines(): all_mo = all_regex.match(line) if all_mo != None: pasta = all_mo.group(1) ano = int(all_mo.group(2)) mes = int(all_mo.group(3)) dia = int(all_mo.group(4)) nome = all_mo.group(5) pai = all_mo.group(6) mae = all_mo.group(7) obs = all_mo.group(8) data.setdefault(pasta, list()) pessoa = Pessoa(nome, pai, mae, obs) processo = Processo(ano, mes, dia, pessoa) data[pasta].append(processo) else: casos_erro += 1 return casos_erro def main(): casos_erro = parseFile("processos.txt") print(f"Casos de erro : {casos_erro}") #frequencia_ano = freq_ano() #print_freq_ano(frequencia_ano) top5 = top5_nome_apelido() print_top5_nome_apelido(top5) if __name__ == "__main__": main()