From 69c42cd91a7933db2f10f153ec482799bdd15bc8 Mon Sep 17 00:00:00 2001 From: Ivan Zinchenko Date: Tue, 28 Nov 2023 03:20:50 +0300 Subject: [PATCH] Make 3 dop, F**K YEAH! --- 3.py | 99 +++++++++++++++++++++++++++++++++++++++++++++++ input.yaml | 20 ++++++++-- input_simple.yaml | 12 +----- output.json | 34 ++++++++++++---- 4 files changed, 143 insertions(+), 22 deletions(-) create mode 100644 3.py diff --git a/3.py b/3.py new file mode 100644 index 0000000..f6541a6 --- /dev/null +++ b/3.py @@ -0,0 +1,99 @@ +TAB_SIZE = 2 +tab = 0 +tabArray = 0 +result = '{\n' +brackets = [] +array = 0 +simpleArray = False + + +def append_to_result(string): + global result, tab + result += f'{" " * (tabArray + tab + 2)}{string}' + + +def compute_tab_size(yamlFile): + for i in yamlFile[1:]: + deltaTab = len(i) - len(i.lstrip()) + if deltaTab != 0: + return deltaTab + return 0 + + +with open('input.yaml', encoding='UTF-8') as inpt: + inpt = inpt.readlines() + TAB_SIZE = compute_tab_size(inpt) + + for key, i in enumerate(inpt): + if i.lstrip()[0] == '#': + continue + + if i.count(':') == 0 and i.strip()[0] == '-': + append_to_result(f'{transform(i.strip()[2:])},\n') + simpleArray = True + continue + if simpleArray: + result = result[:len(result) - 2] + '\n' + append_to_result(brackets.pop() + ',\n') + simpleArray = False + + i = [i.split('#')[0].split(':')[0], ':'.join(i.split('#')[0].split(':')[1:])] + + # Обработка табов + deltaTab = len(i[0]) - len(i[0].lstrip()) + if tab != deltaTab: + if tab < deltaTab: + tab = deltaTab + else: + result = result[:len(result) - 2] + '\n' + append_to_result(brackets.pop() + ',\n') + if abs(deltaTab - tab)//TAB_SIZE > 1: + result = result[:len(result) - 2] + '\n' + append_to_result(brackets.pop() + ',\n') + tab = deltaTab + + # Обработка массивов + if i[0].strip()[0] == '-': + i[0] = i[0].lstrip()[1:].strip() + append_to_result('{\n') + brackets.append('}') + tab += TAB_SIZE + + # Обработка вложенных объектов + if i[1].strip() == '': + br = '' + if inpt[key+1].split(':')[0].strip()[0] == '-': + br = '[]' + else: + br = '{}' + append_to_result(f'"{i[0].strip()}": {br[0]}\n') + brackets.append(br[1]) + else: + def transform(s: str): + try: + return int(s) + except: + try: + return float(s) + except: + if s.strip() in ["y", "Y", "yes", "Yes", "YES", "n", "N", "no", "No", "NO", "true", "True", "TRUE"]: + return "true" + elif s.strip() in ["false", "False", "FALSE", "on", "On", "ON", "off", "Off", "OFF"]: + return "false" + return '"' + s.replace("\\", "\\\\").replace("\"", "\\\"").strip() + '"' + + + i = list(map(transform, i)) + append_to_result(f'{i[0]}: {i[1]},\n') +if brackets is not None: + for _ in range(len(brackets)): + tab -= TAB_SIZE + result = result[:len(result) - 2] + '\n' + i = brackets.pop() + append_to_result(i + ',\n') + +result = result[:len(result) - 2] + '\n' +result += '}' +with open('output.json', 'w', encoding='UTF-8') as output: + output.write(result) +print(result) diff --git a/input.yaml b/input.yaml index ab68b03..838c002 100644 --- a/input.yaml +++ b/input.yaml @@ -1,17 +1,29 @@ lessons: - subject: История России и мира в ХХ веке + hella: 7,3 + chto: + - a + - b + - c + - d + Hello: true weekday: Четверг time: 10:00-11:30 - group: ИРИ 2.2 audience: Ауд. 1410, Кронверкский пр., д.49, лит.А teacher: Айба Тамара Гурамовна - type: Практ\nика + type: Практика format: Очно - subject: История России и мира в ХХ веке weekday: Четверг time: 15:20-16:50 - group: ИРИ 2 audience: Ауд. Lemon Classroom (1419), Кронверкский пр., д.49, лит.А teacher: Пригодич Никита Дмитриевич type: Лекция - format: Очно - дистанционный "], \ No newline at end of file + format: Очно - дистанционный, + wawa: + - mama: mia + ech: toumio + - mama: mia + ech: toumio + - mama: mia + ech: toumio \ No newline at end of file diff --git a/input_simple.yaml b/input_simple.yaml index 743b80f..b3835f9 100644 --- a/input_simple.yaml +++ b/input_simple.yaml @@ -1,12 +1,2 @@ subject: История России и мира в ХХ веке -w2eekday: Четверг -s3ubject: История России и мира в ХХ веке -w4eekday: Четверг -su5bject: История России и мира в ХХ веке -w5eekday: - subject: История России и мира в ХХ веке - w2eekday: Четверг - s3ubject: История России и мира в ХХ веке - w4eekday: Четверг - su5bject: История России и мира в ХХ веке -hellow: world \ No newline at end of file +weekday: Четверг \ No newline at end of file diff --git a/output.json b/output.json index 9323c62..d391678 100644 --- a/output.json +++ b/output.json @@ -2,23 +2,43 @@ "lessons": [ { "subject": "История России и мира в ХХ веке", + "hella": "7,3", + "chto": [ + "a", + "b", + "c", + "d" + ], + "Hello": true, "weekday": "Четверг", "time": "10:00-11:30", - "group": "ИРИ 2.2", "audience": "Ауд. 1410, Кронверкский пр., д.49, лит.А", - "teacher": "Айб\\а Тамара Гурамовна", + "teacher": "Айба Тамара Гурамовна", "type": "Практика", "format": "Очно" - }, + }, { "subject": "История России и мира в ХХ веке", - "wee{kday": "Четверг", - "t}ime": "15:20-16:50", - "group": "ИРИ 2", + "weekday": "Четверг", + "time": "15:20-16:50", "audience": "Ауд. Lemon Classroom (1419), Кронверкский пр., д.49, лит.А", "teacher": "Пригодич Никита Дмитриевич", "type": "Лекция", - "format": "Очно - дистанционный \"]," + "format": "Очно - дистанционный,", + "wawa": [ + { + "mama": "mia", + "ech": "toumio" + }, + { + "mama": "mia", + "ech": "toumio" + }, + { + "mama": "mia", + "ech": "toumio" + } + ] } ] } \ No newline at end of file