histlearn commited on
Commit
3bed5c0
·
verified ·
1 Parent(s): 781ba69

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +12 -40
app.py CHANGED
@@ -39,35 +39,20 @@ def extract_aluno_pattern(nome):
39
  return match.group(1) if match else None
40
  return None
41
 
42
- def match_alunos(tarefas_csv_path, alunos_csv_path, contador_csv_path):
43
  try:
44
  tarefas_df = pd.read_csv(tarefas_csv_path)
45
  alunos_df = pd.read_csv(alunos_csv_path)
46
  except pd.errors.EmptyDataError:
47
  print(f"Arquivo {tarefas_csv_path} ou {alunos_csv_path} está vazio. Pulando...")
48
- return
49
-
50
- print(f"Tarefas DataFrame (antes da normalização):\n{tarefas_df.head()}")
51
- print(f"Alunos DataFrame (antes da normalização):\n{alunos_df.head()}")
52
 
53
  tarefas_df.columns = tarefas_df.columns.str.strip()
54
  alunos_df.columns = alunos_df.columns.str.strip()
55
 
56
  if 'Aluno' not in tarefas_df.columns or 'Nota' not in tarefas_df.columns or 'Duração' not in tarefas_df.columns:
57
  print(f"Colunas 'Aluno', 'Nota' ou 'Duração' não encontradas no arquivo {tarefas_csv_path}. Pulando este arquivo.")
58
- return
59
-
60
- try:
61
- contador_df = pd.read_csv(contador_csv_path)
62
- except FileNotFoundError:
63
- contador_df = pd.DataFrame(columns=['Nome do Aluno', 'Tarefas Completadas', 'Acertos Absolutos', 'Total Tempo'])
64
-
65
- if 'Tarefas Completadas' not in contador_df.columns:
66
- contador_df['Tarefas Completadas'] = 0
67
- if 'Acertos Absolutos' not in contador_df.columns:
68
- contador_df['Acertos Absolutos'] = 0
69
- if 'Total Tempo' not in contador_df.columns:
70
- contador_df['Total Tempo'] = '00:00:00'
71
 
72
  def generate_aluno_pattern(ra, dig_ra):
73
  ra_str = str(ra).zfill(9)
@@ -76,23 +61,11 @@ def match_alunos(tarefas_csv_path, alunos_csv_path, contador_csv_path):
76
 
77
  alunos_df['Aluno_Pattern'] = alunos_df.apply(lambda row: generate_aluno_pattern(row['RA'], row['Dig. RA']), axis=1)
78
 
79
- print(f"Alunos DataFrame (com padrão):\n{alunos_df.head()}")
80
-
81
- def extract_aluno_pattern(nome):
82
- if isinstance(nome, str):
83
- match = re.search(r'\d+.*', nome.lower())
84
- return match.group(0) if match else None
85
- return None
86
-
87
  tarefas_df['Aluno_Pattern'] = tarefas_df['Aluno'].apply(extract_aluno_pattern)
88
  tarefas_df['Duração'] = tarefas_df['Duração'].apply(parse_duration)
89
 
90
- print(f"Tarefas DataFrame (com padrão):\n{tarefas_df.head()}")
91
-
92
  matched_alunos = alunos_df[alunos_df['Aluno_Pattern'].isin(tarefas_df['Aluno_Pattern'])]
93
 
94
- print(f"Matched Alunos DataFrame:\n{matched_alunos.head()}")
95
-
96
  result_df = matched_alunos[['Nome do Aluno']].drop_duplicates()
97
 
98
  for aluno in result_df['Nome do Aluno']:
@@ -102,27 +75,26 @@ def match_alunos(tarefas_csv_path, alunos_csv_path, contador_csv_path):
102
  tempo_total = aluno_tarefas['Duração'].sum()
103
 
104
  if aluno in contador_df['Nome do Aluno'].values:
105
- contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Tarefas Completadas'] += 1
106
  contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Acertos Absolutos'] += nota_total
107
  current_total_tempo = pd.to_timedelta(contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Total Tempo'].values[0])
108
  contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Total Tempo'] = str(current_total_tempo + tempo_total)
109
  else:
110
- contador_df = pd.concat([contador_df, pd.DataFrame({'Nome do Aluno': [aluno], 'Tarefas Completadas': [1], 'Acertos Absolutos': [nota_total], 'Total Tempo': [str(tempo_total)]})], ignore_index=True)
111
-
112
- print(f"Contador DataFrame (atualizado):\n{contador_df.head()}")
113
-
114
- contador_df.to_csv(contador_csv_path, index=False)
115
 
116
- return result_df
117
 
118
  def process_all_tarefas_in_directory(directory, alunos_csv_path, contador_csv_path, relatorio_csv_path):
119
- tarefas_files = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.csv') and f not in ['alunos_fim.csv', 'contador_tarefas.csv']]
 
 
120
 
121
  for i, tarefas_file in enumerate(tarefas_files):
122
  print(f"Processando arquivo {i+1}/{len(tarefas_files)}: {tarefas_file}")
123
- match_alunos(tarefas_file, alunos_csv_path, contador_csv_path)
124
  print(f"Arquivo {tarefas_file} processado.")
125
 
 
126
  process_relatorios(contador_csv_path, relatorio_csv_path)
127
 
128
  def process_relatorios(contador_csv_path, relatorio_csv_path):
@@ -181,4 +153,4 @@ with gr.Blocks() as interface:
181
 
182
  generate_btn.click(fn=process_and_prepare_download, inputs=[html_file, excel_files], outputs=[output_html, download_btn])
183
 
184
- interface.launch()
 
39
  return match.group(1) if match else None
40
  return None
41
 
42
+ def match_alunos(tarefas_csv_path, alunos_csv_path, contador_df):
43
  try:
44
  tarefas_df = pd.read_csv(tarefas_csv_path)
45
  alunos_df = pd.read_csv(alunos_csv_path)
46
  except pd.errors.EmptyDataError:
47
  print(f"Arquivo {tarefas_csv_path} ou {alunos_csv_path} está vazio. Pulando...")
48
+ return contador_df
 
 
 
49
 
50
  tarefas_df.columns = tarefas_df.columns.str.strip()
51
  alunos_df.columns = alunos_df.columns.str.strip()
52
 
53
  if 'Aluno' not in tarefas_df.columns or 'Nota' not in tarefas_df.columns or 'Duração' not in tarefas_df.columns:
54
  print(f"Colunas 'Aluno', 'Nota' ou 'Duração' não encontradas no arquivo {tarefas_csv_path}. Pulando este arquivo.")
55
+ return contador_df
 
 
 
 
 
 
 
 
 
 
 
 
56
 
57
  def generate_aluno_pattern(ra, dig_ra):
58
  ra_str = str(ra).zfill(9)
 
61
 
62
  alunos_df['Aluno_Pattern'] = alunos_df.apply(lambda row: generate_aluno_pattern(row['RA'], row['Dig. RA']), axis=1)
63
 
 
 
 
 
 
 
 
 
64
  tarefas_df['Aluno_Pattern'] = tarefas_df['Aluno'].apply(extract_aluno_pattern)
65
  tarefas_df['Duração'] = tarefas_df['Duração'].apply(parse_duration)
66
 
 
 
67
  matched_alunos = alunos_df[alunos_df['Aluno_Pattern'].isin(tarefas_df['Aluno_Pattern'])]
68
 
 
 
69
  result_df = matched_alunos[['Nome do Aluno']].drop_duplicates()
70
 
71
  for aluno in result_df['Nome do Aluno']:
 
75
  tempo_total = aluno_tarefas['Duração'].sum()
76
 
77
  if aluno in contador_df['Nome do Aluno'].values:
78
+ contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Tarefas Completadas'] += len(aluno_tarefas)
79
  contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Acertos Absolutos'] += nota_total
80
  current_total_tempo = pd.to_timedelta(contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Total Tempo'].values[0])
81
  contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Total Tempo'] = str(current_total_tempo + tempo_total)
82
  else:
83
+ contador_df = pd.concat([contador_df, pd.DataFrame({'Nome do Aluno': [aluno], 'Tarefas Completadas': [len(aluno_tarefas)], 'Acertos Absolutos': [nota_total], 'Total Tempo': [str(tempo_total)]})], ignore_index=True)
 
 
 
 
84
 
85
+ return contador_df
86
 
87
  def process_all_tarefas_in_directory(directory, alunos_csv_path, contador_csv_path, relatorio_csv_path):
88
+ tarefas_files = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.csv') and f not in ['alunos_fim.csv', 'contador_tarefas.csv', 'relatorio_final.csv']]
89
+
90
+ contador_df = pd.DataFrame(columns=['Nome do Aluno', 'Tarefas Completadas', 'Acertos Absolutos', 'Total Tempo'])
91
 
92
  for i, tarefas_file in enumerate(tarefas_files):
93
  print(f"Processando arquivo {i+1}/{len(tarefas_files)}: {tarefas_file}")
94
+ contador_df = match_alunos(tarefas_file, alunos_csv_path, contador_df)
95
  print(f"Arquivo {tarefas_file} processado.")
96
 
97
+ contador_df.to_csv(contador_csv_path, index=False)
98
  process_relatorios(contador_csv_path, relatorio_csv_path)
99
 
100
  def process_relatorios(contador_csv_path, relatorio_csv_path):
 
153
 
154
  generate_btn.click(fn=process_and_prepare_download, inputs=[html_file, excel_files], outputs=[output_html, download_btn])
155
 
156
+ interface.launch()