-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschedule_forms.py
More file actions
56 lines (44 loc) · 2.53 KB
/
schedule_forms.py
File metadata and controls
56 lines (44 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import pandas as pd
from utils import add_space_after_nechet_ned, find_closest_sheet_name
from slud_download import doc_id
def wb_name():
wb = pd.ExcelFile(f"{doc_id}.xlsx")
sheet_names = [add_space_after_nechet_ned(item.strip()) for item in wb.sheet_names]
print(f"Sheet names: {sheet_names}")
return sheet_names
def get_schedule(day_name, schedule_name):
# Загрузка Excel файла
wb = pd.ExcelFile(f"{doc_id}.xlsx")
closest_sheet_name = find_closest_sheet_name(wb.sheet_names, schedule_name)
if not closest_sheet_name:
return "Расписание не найдено"
# Чтение конкретного листа в DataFrame
df = pd.read_excel(wb, sheet_name=closest_sheet_name, usecols='EX,EZ', skiprows=6, nrows=36)
# Преобразование всех столбцов в тип object
df = df.astype(object)
# Заполнение NaN значений "Не указано"
df.fillna("Не указано", inplace=True)
# Разделение DataFrame на блоки по 6 строк
data_by_days = [df.iloc[i:i + 6].values.tolist() for i in range(0, len(df), 6)]
# Функция для форматирования расписания
def format_schedule(day_data, day_name):
formatted_schedule = []
times = ["08:00 — 09:35", "09:45 — 11:20", "11:50 — 13:25", "13:55 — 15:30", "15:40 — 17:15", "17:25 — 19:00"]
emojis = ["1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣"]
for index, row in enumerate(day_data):
subject = row[0]
room = row[1]
time = times[index] if index < len(times) else ""
emoji = emojis[index] if index < len(emojis) else ""
formatted_schedule.append(f"{emoji} {time} : {subject} ({room})")
return f"Расписание на {day_name}:\n" + "\n".join(formatted_schedule)
# Дни недели для расписания
days_of_week = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"]
# Проверка, что day_name входит в список дней недели
if day_name not in days_of_week:
return "Неправильный день недели"
day_index = days_of_week.index(day_name)
day_data = data_by_days[day_index] if day_index < len(data_by_days) else None
if not day_data:
return f"Расписание на {day_name} не найдено"
return format_schedule(day_data, day_name)