import os # библиотека для переименовывания окна и открытия проводника
from fnmatch import fnmatch # библиотека для поиска разделения
splittedList = [] # пустая переменная для разделённого списка
listCSV = [] # пустая переменная для списка для записи в файл
os.system("title pgn splitter v1.3") # переименовывание окна
os.system("explorer .\\") # открытие проводника в папке, где находится программа
def start(): # основная функция
    global splittedList # взаимодействие с глобальной переменной
    global listCSV # взаимодействие с глобальной переменной
    splittedList = [] # обнуление переменной для разделённого списка
    listCSV = [] # обнуление переменной для списка для записи в файл
    print("Выберите режим импорта исходного текста:") # начало диалога
    choose = input("1. По пути файла .pgn\n 2. По тексту из .pgn\n  0. Выход\n>>") # конец диалога и ввод выбора
    if choose == "1": fileOpen() # если выбор равен 1, то вызов функции с открытием файла
    elif choose == "2": textTake() # если выбор равен 2, то вызов функции с вводом текста
    elif choose == "0": exit() # если выбор равен 0, то выход из программы
    else: # если введено что-то помимо 1,2,0, то выполнение следующего куска кода
        print("Некорректный ввод") # вывод ошибки
        start() # перезапуск функции
def fileOpen(): # функция с открытием файла
    global splittedList # взаимодействие с глобальной переменной
    global listCSV # взаимодействие с глобальной переменной
    splittedList = [] # обнуление переменной для разделённого списка
    listCSV = [] # обнуление переменной для списка для записи в файл
    fileToImport = input("Введите путь импортируемого файла (.pgn):\n>>") # ввод пути к файлу импорта
    x = 0 # создание нулевой переменной
    for i in list(fileToImport): # перебор по символам переменной с путём к файлу импорта
        if i == ".": x += 1 # если символ равен точке, то добавить единицу к переменной x
    if x != 1: # если в переменной нет единицы, то есть не указано расширение, то выполнить следующий кусок кода
        fileToImport += ".pgn" # добавление расширения .pgn к файлу
        print("К имеющемуся пути был добавлен .pgn") # сообщение о добавлении расширения .pgn файла
    with open(fileToImport, "r") as impFile: # открытие файла, указанного в переменной
        unsplitted = impFile.read() # добавление содержимого файла в переменную
    splitText(unsplitted) # вызов функции разделения
def textTake(): # функция ручного ввода текста
    unsplitted = input("Введите строку из .pgn:\n>>") # ввод текста
    splitText(unsplitted) # вызов функции разделения
def splitText(unsplitted): # функция разделения
    x = 0 # создание нулевой переменной
    tooSplittedList = unsplitted.split(" ") # разделение неразделённого текста и запись в новую переменную
    for f in tooSplittedList: # перебор слишкомРазделённогоСписка
        try: # выполнение куска кода с проверкой на ошибку
            if fnmatch(f, "*."): splittedList.append(tooSplittedList[x]+";"+tooSplittedList[x+1]+";"+tooSplittedList[x+2]) # если один из элементов списка равен '(какой-то символ).', то добавить к разделённому списку этот элемент списка и 2 следующих
            x += 1 # добаление единицы для дальнейшего перебора
        except IndexError: # проверка на ошибку, если 2 следующих элемента неозможно добавить, то добавить 1
            splittedList.append(tooSplittedList[x]+";"+tooSplittedList[x+1]) # добавление '(число.)' и следующего элемента списка к разделённому списку
    x = 0 # обнуление переменной счётчика
    for i in splittedList: # перебор разделённого списка
        listCSV.append(splittedList[x]+";") # добавление ';' к каждому элементу разделённого списка и добавление в список для записи
        x += 1 # добавление единицы к переменной счётчика для дальнейшего перебора
    fileToExport = input("Введите путь экспортируемого файла (.csv):\n>>") # получение пути к файлу экспорта
    x = 0 # обнуление переменной счётчика
    for i in list(fileToExport): # перебор по символам переменной с путём к файлу экспорта
        if i == ".": x += 1 # если символ равен точке, то добавить единицу к переменной x
    if x != 1: # если в переменной нет единицы, то есть не указано расширение, то выполнить следующий кусок кода
        fileToExport += ".csv" # добавление расширения .csv к файлу
        print("К имеющемуся пути был добален .csv") # сообщение о добавлении расширения .csv файла
    with open(fileToExport, "w") as expFile: # открытие или создание файла, указанного в переменной
        for item in listCSV: # перебор элементов в списке для записи
            expFile.write(str(item) + "\n") # запись каждого элемента в отдельную строчку
    print("Успешный вывод в файл") # сообщение об успешном выводе готового текста в файл
    start() # перезапуск переменной
start() # запуск переменной в первый раз