histlearn commited on
Commit
04ab3a5
·
verified ·
1 Parent(s): 983adac

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -20
app.py CHANGED
@@ -39,20 +39,35 @@ 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_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,11 +76,23 @@ def match_alunos(tarefas_csv_path, alunos_csv_path, contador_df):
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,35 +102,27 @@ def match_alunos(tarefas_csv_path, alunos_csv_path, contador_df):
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
- try:
91
- contador_df = pd.read_csv(contador_csv_path)
92
- except FileNotFoundError:
93
- contador_df = pd.DataFrame(columns=['Nome do Aluno', 'Tarefas Completadas', 'Acertos Absolutos', 'Total Tempo'])
94
 
95
  for i, tarefas_file in enumerate(tarefas_files):
96
  print(f"Processando arquivo {i+1}/{len(tarefas_files)}: {tarefas_file}")
97
- contador_df = match_alunos(tarefas_file, alunos_csv_path, contador_df)
98
  print(f"Arquivo {tarefas_file} processado.")
99
 
100
- # Recontar as tarefas completadas para garantir a contagem correta
101
- aluno_counts = tarefas_df['Aluno_Pattern'].value_counts()
102
- for aluno_pattern, count in aluno_counts.items():
103
- if aluno_pattern in contador_df['Nome do Aluno'].values:
104
- contador_df.loc[contador_df['Nome do Aluno'] == aluno_pattern, 'Tarefas Completadas'] = count
105
-
106
- contador_df.to_csv(contador_csv_path, index=False)
107
  process_relatorios(contador_csv_path, relatorio_csv_path)
108
 
109
  def process_relatorios(contador_csv_path, relatorio_csv_path):
 
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
 
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
  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):