Skip to content

Instantly share code, notes, and snippets.

@kjsman
Last active March 2, 2020 07:46
Show Gist options
  • Save kjsman/a1f98c207ae5e7bff3edc8deaee0090f to your computer and use it in GitHub Desktop.
Save kjsman/a1f98c207ae5e7bff3edc8deaee0090f to your computer and use it in GitHub Desktop.
대곽 교사 시간표를 학생용으로 정렬하는 코드. 스파게티인건 어쩔수 없음
import openpyxl
import re
import operator
from yaml import load, dump
try:
from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
from yaml import Loader, Dumper
wb = openpyxl.load_workbook("2020학년도1학기전체시간표_최종.xlsx")
sheet = wb['전체 교사 시간표']
first_teacher_row = 5
teacher_count = 54
first_lesson = 3
lesson_count = 9
class_count = 6
continue_mark = ["──", "─▷"]
class_to_index = lambda x, y: f'{x}-{y}'
get_lesson_name = lambda teacher, time: sheet.cell(row=first_teacher_row + teacher * 2, column=time + first_lesson - 1).value
get_teacher_name = lambda teacher: sheet.cell(row=first_teacher_row + teacher * 2, column=2).value
get_formatted_lesson_name = lambda teacher, time: f'{str(get_lesson_name(teacher, time)).strip()} ({get_teacher_name(teacher)} 선생님)'
get_lesson_participant = lambda teacher, time: sheet.cell(row=first_teacher_row + teacher * 2 + 1, column=time + first_lesson - 1).value
def parse_time_table():
time_table = {}
for x in range(1, 3 + 1):
for y in range(1, 6 + 1):
time_table[class_to_index(x, y)] = {}
for teacher_num in range(teacher_count):
latest_lesson_name = None
latest_lesson_participants = []
for time_num in range(1, lesson_count + 1):
lesson_name = get_lesson_name(teacher_num, time_num)
if lesson_name is None:
continue
elif lesson_name in continue_mark:
pass
else:
latest_lesson_name = get_formatted_lesson_name(teacher_num, time_num)
latest_lesson_participants = re.findall(r"\d-\d", str(get_lesson_participant(teacher_num, time_num)))
for participant in latest_lesson_participants:
time_table[participant][time_num] = latest_lesson_name
return time_table
full_time_table = []
for x in range(5):
first_lesson = 3 + 9 * x
full_time_table.append(parse_time_table())
result = {}
day_name = ['월', '화', '수', '목', '금']
for x in full_time_table[0].keys():
result[x] = {}
for k in range(5):
result[x][day_name[k]] = dict(sorted(full_time_table[k][x].items(), key=operator.itemgetter(0)))
with open("timetable.yaml", 'w') as f:
f.write(dump(result, allow_unicode=True, sort_keys=False))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment