Make 3 dop, F**K YEAH!

This commit is contained in:
Ivan Zinchenko 2023-11-28 03:20:50 +03:00
parent b825fede85
commit 69c42cd91a
Signed by: zinch
GPG Key ID: 6D45AA2C8FD6A37E
4 changed files with 143 additions and 22 deletions

99
3.py Normal file
View File

@ -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)

View File

@ -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: Очно - дистанционный "],
format: Очно - дистанционный,
wawa:
- mama: mia
ech: toumio
- mama: mia
ech: toumio
- mama: mia
ech: toumio

View File

@ -1,12 +1,2 @@
subject: История России и мира в ХХ веке
w2eekday: Четверг
s3ubject: История России и мира в ХХ веке
w4eekday: Четверг
su5bject: История России и мира в ХХ веке
w5eekday:
subject: История России и мира в ХХ веке
w2eekday: Четверг
s3ubject: История России и мира в ХХ веке
w4eekday: Четверг
su5bject: История России и мира в ХХ веке
hellow: world
weekday: Четверг

View File

@ -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"
}
]
}
]
}