Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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,
|
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'] +=
|
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': [
|
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
|
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,
|
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()
|