Доп задание 4

This commit is contained in:
Ivan Zinchenko 2023-11-14 15:46:48 +03:00
parent eb45a43abe
commit 245c1f188e
Signed by: zinch
GPG Key ID: 6D45AA2C8FD6A37E

153
4.py Normal file
View File

@ -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'(?<!-) ', i[0]))
if tab != deltaTab:
if tab < deltaTab:
tab = deltaTab
else:
tab = deltaTab
result = result[:len(result) - 2] + '\n'
append_to_result(brackets.pop() + ',\n')
# Обработка массивов
if re.findall(r' *- .*', i[0]):
if tab == tabArray and ']' not in brackets:
append_to_result('[\n')
brackets.append(']')
tabArray += TAB_SIZE
i[0] = i[0].lstrip()[1:].strip()
append_to_result('{\n')
brackets.append('}')
tab += TAB_SIZE
# Обработка вложенных объектов
if i[1].strip() == '':
if re.findall(r' *- .*', inpt[key+1].split(':')[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'
append_to_result(brackets.pop() + ',\n')
result = result[:len(result) - 2] + '\n'
result += '}'
t0 = time.perf_counter()
for _ in range(100):
task0()
print('Задание 0: ', time.perf_counter() - t0)
t1 = time.perf_counter()
for _ in range(100):
task1()
print('Задание 1: ', time.perf_counter() - t1)
t2 = time.perf_counter()
for _ in range(100):
task2()
print('Задание 2: ', time.perf_counter() - t2)