import codecs import json def text_process(arr): new_arr = [] new_arr.append(f"## **{arr.pop(0)}**") for _ in range(4): del arr[0] stek = [] p = False li_c = False li = False li_c2 = False for s in arr: if "Пример" in s: if p: new_arr.append(f"|||{'<br>'.join(stek).rstrip('<br>')}") else: new_arr.append("<br>".join(stek).rstrip("<br>")) p = True stek = [] new_arr.append(f"### **{s}**") elif p: if s == "Ввод\tВывод": if stek: new_arr.append(f"|||{'<br>'.join(stek).rstrip('<br>')}") new_arr.append("<br>".join(stek).rstrip("<br>")) stek = [] new_arr.append("|Ввод |Вывод|") new_arr.append("|-----|-----|") else: stek.append(s) elif s == "Формат ввода" or s == "Формат вывода" or s == "Примечание": new_arr.append("<br>".join(stek).rstrip("<br>")) stek = [] new_arr.append(f"### **{s}**") else: if s and s[-1] == ":": li_c = True stek.append(s) elif li_c: li_c = False if s == "": li = True new_arr.append("<br>".join(stek) + "<br>") stek = [] elif li: if not li_c2: if s[-1] == ";": li_c2 = True else: li = False stek.append(s) if li_c2: new_arr.append(f"* {s}") if s[-1] == ".": li = False new_arr.append("") li_c2 = False else: stek.append(s) new_arr.append(f"|||{'<br>'.join(stek[:-1]).rstrip('<br>')}") input_count = stek[-1] if input_count != "_": input_count = int(input_count) for i in range(len(new_arr)): if new_arr[i][:3] == "|||": data = new_arr[i][3:].split("<br>") if input_count == "_": data = f"|{'<br>'.join(data)}||" elif input_count > 0: if 2 * input_count > len(data): data = f"|{'<br>'.join(data[:input_count])}|{'<br>'.join(data[input_count:])}<br>{'<br>'.join([' '] * (2 * input_count - len(data)))}<br>|" elif 2 * input_count == len(data): data = f"|{'<br>'.join(data[:input_count])}|{'<br>'.join(data[input_count:])}|" else: data = f"|{'<br>'.join(data[:input_count])}<br>{'<br>'.join([' '] * (len(data) - 2 * input_count))}<br>|{'<br>'.join(data[input_count:])}<br>|" else: if -2 * input_count > len(data): data = f"|{'<br>'.join(data[:len(data) + input_count])}<br>{'<br>'.join([' '] * (-2 * input_count - len(data)))}<br>|{'<br>'.join(data[:-1 * input_count])}|" elif -2 * input_count == len(data): data = f"|{'<br>'.join(data[:-1 * input_count])}|{'<br>'.join(data[-1 * input_count:])}|" else: data = f"|{'<br>'.join(data[:len(data) + input_count])}|{'<br>'.join(data[len(data) + input_count:])}<br>{'<br>'.join([' '] * (len(data) - -2 * input_count))}<br>|" new_arr[i] = data for i in range(len(new_arr)): if new_arr[i] and (new_arr[i][0] == "|" or new_arr[i][0] == "#"): continue elems = new_arr[i].split("<br>") del_ind = [] for j in range(len(elems) - 1): if len(elems[j]) == 1 and elems[j] == elems[j + 1][0]: del_ind.append(j) if del_ind: for j in del_ind[::-1]: if j: buff = elems.pop(j + 1) elems[j - 1] = elems[j - 1] + "$" + buff[0] + "$" + buff[1:] del elems[j] new_arr[i] = "<br>".join(elems) return new_arr f = codecs.open("2.4/24.ipynb", 'r', encoding="utf-8") source = f.read() y = json.loads(source) f.close() inp_data = open("md.txt", encoding="utf-8") arr = [] tarr = [] for i in inp_data: if i == "/py\n": arr.append(tarr) tarr = [] elif i == "/md\n": arr.append(tarr) tarr = [] else: tarr.append(i.strip("\n")) arr.append(tarr) del arr[0] data = {'cells':[], 'metadata': {'kernelspec': {'display_name': 'Python 3', 'language': 'python', 'name': 'python3'}, 'language_info': {'name': 'python', 'version': '3.11.1'}}, 'nbformat': 4, 'nbformat_minor': 2} print(*arr, sep="\n") for i in range(len(arr)): if i % 2 == 0: py_data = {'cell_type': 'markdown', 'metadata': {}, 'source': [],} new_arr = text_process(arr[i]) for s in new_arr: py_data['source'] += [s] else: py_data = {'cell_type': 'code', 'execution_count': None, 'metadata': {}, 'outputs': [], 'source': [],} for s in arr[i]: py_data['source'] += [s] data['cells'] += [py_data] with open('output.ipynb', 'w') as file: # Write the JSON data to the file json.dump(data, file) file.close()