# 6. Необходимо создать (не программно) текстовый файл,
# где каждая строка описывает учебный предмет и наличие лекционных,
# практических и лабораторных занятий по этому предмету и их количество.
# Важно, чтобы для каждого предмета не обязательно были все типы занятий.
# Сформировать словарь, содержащий название предмета и общее количество занятий по нему.
# Вывести словарь на экран.
#
# Примеры строк файла:
# Информатика: 100(л) 50(пр) 20(лаб).
# Физика: 30(л) — 10(лаб)
# Физкультура: — 30(пр) —
#
# Пример словаря:
# {“Информатика”: 170, “Физика”: 40, “Физкультура”: 30}
import re

my_file = open("task_06_file.txt", "r", encoding='utf-8')
data_list = []
result = {}


# функция поиска названия предмета из строки
def find_subject(string_line):
    return string_line[:string_line.find(":")]


# функция поиска в строке времени занятий и их суммирования для данного предмета
def hours_sum(string_line):
    sum_result = 0
    # получаем список элементов с пробелами и скобками (признак указания часов)
    # использую регулярное выражение для поиска такого набора:
    # сначала пробел, потом любое количество цифр, а затем символ "("
    dirty_list = re.findall(r' \d+\(', string_line)
    for item in dirty_list:
        # очищаем от начального пробела и завершающей скобки, а потом суммируем:
        sum_result += float(item[1:-1])
    return sum_result


print('Начальные данные из файла:')
for line in my_file:
    print(line.rstrip())
    # читаем строки из файла, удаляем последний символ в строке "\n"
    # и помещаем в список data_list
    data_list.append(line.rstrip())

for line in data_list:
    # наполняем итоговый словарь
    result.update({find_subject(line): hours_sum(line)})

print(f'\nИтоговый словарь: \n{result}')

my_file.close()
