

import os 
import sys
этот_файл = __file__ 
эта_папка = os.path.dirname(этот_файл) 
папка_выше = os.path.dirname(эта_папка)
sys.path.append(папка_выше) 
from проверка_элемента import проверка_содержит
from терминал import печать
import проверка_элемента



def записать_в_файл(путь : str, текст : str) -> str:
    with open(путь,"w", encoding="utf-8") as file:
        file.write(текст)



РАЗДЕЛИТЕЛЬ_ПАР = "___,___333223232№233АВЫФВ"
РАЗДЕЛИТЕЛЬ_КЛЮЧЕЙ_ОТ_ЗНАЧЕНИЙ  = "___:---2=2049в___"



def считать_из_файла(путь):
    with open(путь, "r", encoding="utf-8") as file:
        return file.read()
    





def преобразовать_словарь_в_текст(словарь :dict ):
    # если разделитель встречается в одном из значений слоаря,
    # то выдать ошибку "В одном из значений словаря содержится разделитель"
    if проверка_содержит(
        что = [РАЗДЕЛИТЕЛЬ_КЛЮЧЕЙ_ОТ_ЗНАЧЕНИЙ,РАЗДЕЛИТЕЛЬ_ПАР],
                где= list(словарь.values())
                
                
                ):

        raise ValueError (печать (" В одном из значений словаря найден разделитель ",
                         красный =True,
                         не_печатать = True 
        ))
    словарь.values()
    результат = ""
    for ключ,значение in словарь.items():
        пара_в_тексте = f"{ключ}{РАЗДЕЛИТЕЛЬ_КЛЮЧЕЙ_ОТ_ЗНАЧЕНИЙ}{значение}"
        результат += пара_в_тексте + РАЗДЕЛИТЕЛЬ_ПАР
    результат = результат[:-len(РАЗДЕЛИТЕЛЬ_ПАР)]
    return результат





def записать_словари_в_файл(путь: str, список_словарей: str) -> None:
    общий_результат =""
    for список_словарей in список_словарей:
        результат = преобразовать_словарь_в_текст(список_словарей) 
        общий_результат += результат + "\n"
        # "\n" специальный символ, означающий завершение абзаца.Все,что написанно после него - будет еаписанно с новой строки
    записать_в_файл(путь,общий_результат)
    



    
def считать_словари_из_файла(путь: str ,) -> list:
    текст = считать_из_файла(путь)
    список_словарей = []
    for строка in текст.splitlines():
        пары = строка.split(РАЗДЕЛИТЕЛЬ_ПАР)
        словарь = {}
        for пара in пары:
            ключ, значение = пара.split(РАЗДЕЛИТЕЛЬ_КЛЮЧЕЙ_ОТ_ЗНАЧЕНИЙ) 
            словарь[ключ] = значение
        список_словарей.append(словарь)
    
    return список_словарей








if __name__== "__main__":

    путь = "C:\\Users\\2024.09 Пайтон\\Desktop\Ученики\\Акимов Константин\\Dizert\\ff.txt"
    текст = "Гуглить это плохо"
# Windos разбивай разные папки с помощью дроби\ 
# питон воспринемает этот символ как специальный и ожидает после него дополнительный специальный символ
# Поэтому эсли просто скопировать путь к файлу, питон выдаст ошибку.
# Чтобы этого недопустить надо:
    # либо проставить везде двойные дроби вместо одинарных "\\"
    # либо до кавычки поставить букву "R", но тогда не получиться использовать "F" строку
    # записать_в_файл(путь,текст) 
    # текст_из_файла = считать_из_файла(путь)
    # print(текст_из_файла == текст) 



    список_словарей = [{
        "имя": "н___:___а", 
        "фамилия": "Тарасов",
        "Должность": "преподаватель",
        "возраст": "35"
    } , {"имя": "Федор", 
        "фамилия": "Черенков",
        "Должность": "футболист",
        "возраст": "42"
    } , ]

    записать_словари_в_файл(путь,список_словарей) 
    результат = считать_словари_из_файла(путь) 
    print(результат == список_словарей)
    считать_словари_из_файла(путь) 

