From 245c1f188e2e269e191b84cf206cb93ae885aeac Mon Sep 17 00:00:00 2001 From: Ivan Zinchenko Date: Tue, 14 Nov 2023 15:46:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BF=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.py | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 4.py diff --git a/4.py b/4.py new file mode 100644 index 0000000..25635ad --- /dev/null +++ b/4.py @@ -0,0 +1,153 @@ +import time +import yaml +import re +import json + +# --- TASK 0 --- # + +TAB_SIZE = 2 +tab = 0 +tabArray = 0 +result = '{\n' +brackets = [] + + +def task0(): + global TAB_SIZE, tab, tabArray, result, brackets + + def append_to_result(string): + global result, tab + result += f'{" " * (tabArray + tab + 2)}{string}' + + with open('input.yaml', encoding='UTF-8') as inpt: + inpt = inpt.readlines() + for key, i in enumerate(inpt): + i = i.split(':') + if tab != len(i[0]) - len(i[0].lstrip()): + if tab < len(i[0]) - len(i[0].lstrip()): + tab = len(i[0]) - len(i[0].lstrip()) + else: + tab = len(i[0]) - len(i[0].lstrip()) + result = result[:len(result) - 2] + '\n' + append_to_result(brackets.pop() + ',\n') + if i[0].strip()[0] == '-': + if tab == tabArray and ']' not in brackets: + append_to_result('[\n') + brackets.append(']') + tabArray += 2 + 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 shielding(s: str): + return s.replace("\\", "\\\\").replace("\"", "\\\"") + i = list(map(shielding, i)) + append_to_result(f'"{i[0].strip()}": "{":".join(i[1:]).strip()}",\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 += '}' + +# --- TASK 1 --- # + + +def task1(): + with open('input.yaml', encoding='UTF-8') as inpt: + obj = yaml.safe_load(inpt) + json.dumps(obj, ensure_ascii=False).encode('utf8') + + +# --- TASK 2 --- # + +TAB_SIZE = 2 +tab = 0 +tabArray = 0 +result = '{\n' +brackets = [] + + +def task2(): + global TAB_SIZE, tab, tabArray, result, brackets + + def append_to_result(string): + global result, tab, tabArray + result += f'{" " * (tabArray + tab + 2)}{string}' + + with open('input.yaml', encoding='UTF-8') as inpt: + inpt = inpt.readlines() + for key, i in enumerate(inpt): + i = i.split(':') + + # Обработка табов + deltaTab = len(re.findall(r'(?