Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -25,7 +25,7 @@ def format_timedelta(td):
|
|
25 |
def normalize_html_to_csv(input_html_path, output_csv_path):
|
26 |
html_data = pd.read_html(input_html_path)
|
27 |
data = html_data[0]
|
28 |
-
data.to_csv(output_csv_path, index=False, encoding='utf-8')
|
29 |
|
30 |
def normalize_multiple_excel_to_csv(input_directory, output_directory):
|
31 |
input_excel_paths = [os.path.join(input_directory, f) for f in os.listdir(input_directory) if f.endswith('.xlsx')]
|
@@ -35,7 +35,7 @@ def normalize_multiple_excel_to_csv(input_directory, output_directory):
|
|
35 |
unnecessary_columns = [col for col in excel_data.columns if 'Unnamed' in col]
|
36 |
if unnecessary_columns:
|
37 |
excel_data = excel_data.drop(columns=unnecessary_columns)
|
38 |
-
excel_data.to_csv(output_csv_path, index=False, encoding='utf-8')
|
39 |
|
40 |
def extract_aluno_pattern(nome):
|
41 |
if isinstance(nome, str):
|
@@ -45,8 +45,8 @@ def extract_aluno_pattern(nome):
|
|
45 |
|
46 |
def match_alunos(tarefas_csv_path, alunos_csv_path, contador_csv_path):
|
47 |
try:
|
48 |
-
tarefas_df = pd.read_csv(tarefas_csv_path, encoding='utf-8')
|
49 |
-
alunos_df = pd.read_csv(alunos_csv_path, encoding='utf-8')
|
50 |
except pd.errors.EmptyDataError:
|
51 |
print(f"Arquivo {tarefas_csv_path} ou {alunos_csv_path} está vazio. Pulando...")
|
52 |
return
|
@@ -59,7 +59,7 @@ def match_alunos(tarefas_csv_path, alunos_csv_path, contador_csv_path):
|
|
59 |
return
|
60 |
|
61 |
try:
|
62 |
-
contador_df = pd.read_csv(contador_csv_path, encoding='utf-8')
|
63 |
except FileNotFoundError:
|
64 |
contador_df = pd.DataFrame(columns=['Nome do Aluno', 'Tarefas Completadas', 'Acertos Absolutos', 'Total Tempo'])
|
65 |
|
@@ -104,7 +104,7 @@ def match_alunos(tarefas_csv_path, alunos_csv_path, contador_csv_path):
|
|
104 |
else:
|
105 |
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)
|
106 |
|
107 |
-
contador_df.to_csv(contador_csv_path, index=False, encoding='utf-8')
|
108 |
|
109 |
return result_df
|
110 |
|
@@ -122,7 +122,7 @@ def process_all_tarefas_in_directory(directory, alunos_csv_path, contador_csv_pa
|
|
122 |
process_relatorios(contador_csv_path, relatorio_csv_path)
|
123 |
|
124 |
def process_relatorios(contador_csv_path, relatorio_csv_path):
|
125 |
-
contador_df = pd.read_csv(contador_csv_path, encoding='utf-8')
|
126 |
contador_df['Média de Acertos'] = ((contador_df['Acertos Absolutos'] / (contador_df['Tarefas Completadas'] * 2)) * 100).round(2).astype(str) + '%'
|
127 |
contador_df['Total Tempo'] = pd.to_timedelta(contador_df['Total Tempo'])
|
128 |
contador_df['Tempo Médio por Tarefa'] = contador_df['Total Tempo'] / contador_df['Tarefas Completadas']
|
@@ -136,7 +136,7 @@ def process_relatorios(contador_csv_path, relatorio_csv_path):
|
|
136 |
media_tempo_medio_turma = tempo_medio_por_tarefa['Tempo Médio por Tarefa'].mean()
|
137 |
media_tempo_medio_turma = format_timedelta(media_tempo_medio_turma)
|
138 |
|
139 |
-
contador_df.to_csv(relatorio_csv_path, index=False, encoding='utf-8')
|
140 |
return contador_df, media_tempo_medio_turma
|
141 |
|
142 |
def generate_pdf_report(dataframe, media_tempo_medio_turma, html_path, output_pdf_path):
|
@@ -223,11 +223,29 @@ def generate_pdf_report(dataframe, media_tempo_medio_turma, html_path, output_pd
|
|
223 |
temp_graphics_pdf = 'temp_graphics.pdf'
|
224 |
pdf.output(temp_graphics_pdf)
|
225 |
|
226 |
-
#
|
227 |
-
|
228 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
temp_html_path = 'temp_html_with_borders.html'
|
230 |
-
with open(temp_html_path, 'w', encoding='utf-8') as f:
|
231 |
f.write(html_content)
|
232 |
|
233 |
temp_html_pdf = 'temp_html.pdf'
|
@@ -281,7 +299,7 @@ def processar_relatorio(html_file, tarefa_files):
|
|
281 |
|
282 |
# Salva o relatório em HTML e PDF
|
283 |
html_output_path = os.path.join(output_directory, "relatorio_final.html")
|
284 |
-
df.to_html(html_output_path, index=False, encoding='utf-8')
|
285 |
|
286 |
pdf_output_path = os.path.join(output_directory, "relatorio_final.pdf")
|
287 |
generate_pdf_report(df, media_tempo_medio_turma, html_output_path, pdf_output_path)
|
|
|
25 |
def normalize_html_to_csv(input_html_path, output_csv_path):
|
26 |
html_data = pd.read_html(input_html_path)
|
27 |
data = html_data[0]
|
28 |
+
data.to_csv(output_csv_path, index=False, encoding='utf-8-sig')
|
29 |
|
30 |
def normalize_multiple_excel_to_csv(input_directory, output_directory):
|
31 |
input_excel_paths = [os.path.join(input_directory, f) for f in os.listdir(input_directory) if f.endswith('.xlsx')]
|
|
|
35 |
unnecessary_columns = [col for col in excel_data.columns if 'Unnamed' in col]
|
36 |
if unnecessary_columns:
|
37 |
excel_data = excel_data.drop(columns=unnecessary_columns)
|
38 |
+
excel_data.to_csv(output_csv_path, index=False, encoding='utf-8-sig')
|
39 |
|
40 |
def extract_aluno_pattern(nome):
|
41 |
if isinstance(nome, str):
|
|
|
45 |
|
46 |
def match_alunos(tarefas_csv_path, alunos_csv_path, contador_csv_path):
|
47 |
try:
|
48 |
+
tarefas_df = pd.read_csv(tarefas_csv_path, encoding='utf-8-sig')
|
49 |
+
alunos_df = pd.read_csv(alunos_csv_path, encoding='utf-8-sig')
|
50 |
except pd.errors.EmptyDataError:
|
51 |
print(f"Arquivo {tarefas_csv_path} ou {alunos_csv_path} está vazio. Pulando...")
|
52 |
return
|
|
|
59 |
return
|
60 |
|
61 |
try:
|
62 |
+
contador_df = pd.read_csv(contador_csv_path, encoding='utf-8-sig')
|
63 |
except FileNotFoundError:
|
64 |
contador_df = pd.DataFrame(columns=['Nome do Aluno', 'Tarefas Completadas', 'Acertos Absolutos', 'Total Tempo'])
|
65 |
|
|
|
104 |
else:
|
105 |
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)
|
106 |
|
107 |
+
contador_df.to_csv(contador_csv_path, index=False, encoding='utf-8-sig')
|
108 |
|
109 |
return result_df
|
110 |
|
|
|
122 |
process_relatorios(contador_csv_path, relatorio_csv_path)
|
123 |
|
124 |
def process_relatorios(contador_csv_path, relatorio_csv_path):
|
125 |
+
contador_df = pd.read_csv(contador_csv_path, encoding='utf-8-sig')
|
126 |
contador_df['Média de Acertos'] = ((contador_df['Acertos Absolutos'] / (contador_df['Tarefas Completadas'] * 2)) * 100).round(2).astype(str) + '%'
|
127 |
contador_df['Total Tempo'] = pd.to_timedelta(contador_df['Total Tempo'])
|
128 |
contador_df['Tempo Médio por Tarefa'] = contador_df['Total Tempo'] / contador_df['Tarefas Completadas']
|
|
|
136 |
media_tempo_medio_turma = tempo_medio_por_tarefa['Tempo Médio por Tarefa'].mean()
|
137 |
media_tempo_medio_turma = format_timedelta(media_tempo_medio_turma)
|
138 |
|
139 |
+
contador_df.to_csv(relatorio_csv_path, index=False, encoding='utf-8-sig')
|
140 |
return contador_df, media_tempo_medio_turma
|
141 |
|
142 |
def generate_pdf_report(dataframe, media_tempo_medio_turma, html_path, output_pdf_path):
|
|
|
223 |
temp_graphics_pdf = 'temp_graphics.pdf'
|
224 |
pdf.output(temp_graphics_pdf)
|
225 |
|
226 |
+
# Estilo personalizado para bordas da tabela
|
227 |
+
html_style = """
|
228 |
+
<style>
|
229 |
+
.dataframe {
|
230 |
+
border-collapse: collapse;
|
231 |
+
width: 100%;
|
232 |
+
}
|
233 |
+
.dataframe th, .dataframe td {
|
234 |
+
border: 1px solid black;
|
235 |
+
padding: 8px;
|
236 |
+
text-align: left;
|
237 |
+
}
|
238 |
+
</style>
|
239 |
+
"""
|
240 |
+
|
241 |
+
# Ler o conteúdo HTML e adicionar o estilo personalizado
|
242 |
+
with open(html_path, 'r', encoding='utf-8-sig') as f:
|
243 |
+
html_content = f.read()
|
244 |
+
|
245 |
+
html_content = html_style + html_content
|
246 |
+
|
247 |
temp_html_path = 'temp_html_with_borders.html'
|
248 |
+
with open(temp_html_path, 'w', encoding='utf-8-sig') as f:
|
249 |
f.write(html_content)
|
250 |
|
251 |
temp_html_pdf = 'temp_html.pdf'
|
|
|
299 |
|
300 |
# Salva o relatório em HTML e PDF
|
301 |
html_output_path = os.path.join(output_directory, "relatorio_final.html")
|
302 |
+
df.to_html(html_output_path, index=False, encoding='utf-8-sig')
|
303 |
|
304 |
pdf_output_path = os.path.join(output_directory, "relatorio_final.pdf")
|
305 |
generate_pdf_report(df, media_tempo_medio_turma, html_output_path, pdf_output_path)
|