Что нужно сделать
У вас есть файл с протоколом регистраций пользователей на сайте — 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')