Доп задание 4
This commit is contained in:
parent
eb45a43abe
commit
245c1f188e
153
4.py
Normal file
153
4.py
Normal 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)
|
||||
Loading…
Reference in New Issue
Block a user