Регистрация

Что нужно сделать

У вас есть файл с протоколом регистраций пользователей на сайте — registrations.txt. Каждая строка содержит имя, емейл и возраст, разделённые пробелами. Например: Василий test@test.ru 27.

Напишите программу, которая проверяет данные из файла для каждой строки:

  • Присутствуют все три поля.
  • Поле «Имя» содержит только буквы.
  • Поле «Имейл» содержит @ и . (точку).
  • Поле «Возраст» является числом от 10 до 99.

В результате проверки сформируйте два файла:

  • registrations_good.log — для правильных данных, записывать строки в том виде, как есть;
  • registrations_bad.log — для ошибочных, записывать строку и вид ошибки.

Для валидации строки данных напишите функцию, которая может выдавать исключения:

  • НЕ присутствуют все три поля: IndexError.
  • Поле «Имя» содержит НЕ только буквы: NameError.
  • Поле «Имейл» НЕ содержит @ и . (точку): SyntaxError.
  • Поле «Возраст» НЕ является числом от 10 до 99: ValueError.

Формат выходных данных

Содержимое файла registrations_bad.log:
Ольга kmrn@gmail.com 123		Поле «Возраст» НЕ является числом от 10 до 99
Чехова kb@gmail.com 142		Поле «Возраст» НЕ является числом от 10 до 99
……
Степан ky 59		Поле «Имейл» НЕ содержит @ и . (точку)
……

Содержимое файла registrations_good.log:
Геннадий ttdababmt@gmail.com 69
Ольга ysbxur@gmail.com 20
……

Что оценивается

  • Результат вычислений корректен.
  • Формат вывода соответствует примеру.
  • Основной функционал описан в отдельных функциях.
  • Переменные и функции имеют значащие имена, не только a, b, c, d (подробнее об этом в видео 2.3).
  • Входные и выходные файлы названы так, как указано в задании.
def logwriter(doc):
    with open(doc, 'r', encoding='UTF-8') as file, \
            open('registrations_good.log', 'w', encoding='UTF-8') as good_log, \
            open('registrations_bad.log', 'w', encoding='UTF-8') as bad_log:
        for line in file:
            try:
                reg_list = line.split()
                if len(reg_list) < 3:
                    raise IndexError
                if reg_list[0].isalpha() == False:
                    raise NameError
                if '@' not in reg_list[1] or '.' not in reg_list[1]:
                    raise SyntaxError
                if 99 < int(reg_list[2]) or int(reg_list[2]) < 0:
                    raise ValueError
            except IndexError:
                bad_log.writelines(str(line) + '\t(!)НЕ присутствуют все три поля\n')
            except NameError:
                bad_log.writelines(str(line) + '\t(!)Поле «Имя» содержит НЕ только буквы\n')
            except SyntaxError:
                bad_log.writelines(str(line) + '\t(!)Поле «Имейл» НЕ содержит @ и . (точку)\n')
            except ValueError:
                bad_log.writelines(str(line) + '\t(!)Поле «Возраст» НЕ является числом от 10 до 99\n')
            else:
                good_log.writelines(str(line))

logwriter('registrations.txt')