histlearn commited on
Commit
0d0c9ef
·
verified ·
1 Parent(s): 1d9c621

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -13
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
- # Converter o HTML para PDF com bordas na tabela
227
- html_content = open(html_path, 'r', encoding='utf-8').read()
228
- html_content = html_content.replace('<table border="1" class="dataframe">', '<table style="border-collapse: collapse; width: 100%;" border="1" class="dataframe">')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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)