Last active
March 2, 2020 07:46
-
-
Save kjsman/a1f98c207ae5e7bff3edc8deaee0090f to your computer and use it in GitHub Desktop.
대곽 교사 시간표를 학생용으로 정렬하는 코드. 스파게티인건 어쩔수 없음
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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