Проверить данные из файла, для каждой строки питон

Может кто-нибудь и подскажет, дан файл txt. 10000 строк. В строке содержится информация об имени, электронной почте и возрасте человека. Нужно проверить данные из файла, для каждой строки:

  1. Присутствуют все три поля,
  2. поле имени содержит только буквы,
  3. поле email содержит @ и .,
  4. поле возраст является числом от 10 до 99.

Пример файла:

Ли [email protected] 58  
Волочкова [email protected] 9  
Ольга [email protected] 58  
Чонгкун [email protected] 84   
iflyyvp.ru 73  
Чонгкун [email protected]  
Ярослав42 [email protected] 74  
Ли  25 Dgiga mwwtk.mail.ru 95  
Тролль65 [email protected] 31  
Ольга [email protected] 99  
Яочуан [email protected] 100   
snaper [email protected] 16  
Зефир [email protected] 7  
Хенг  [email protected] 108  
Халк [email protected]     

и тд.......

Я в начале сделала: каждую строку вогнала в список(код прикрепляю):

with open('registrations.txt', 'r', encoding='utf-8') as fh:
    for line in fh:
        print( line.strip().split())
['Джигурда', '[email protected]', '14']  
['Ли' , '[email protected]' , '58']  
['Волочкова' , '[email protected]' , '9']  
['Ли' , '25']  

и тд.....

Но дальше не могу понять, как прогонять данные? Понимаю, что можно сделать через классы? Но как? Не могу сориентироваться


Ответы (2 шт):

Автор решения: Игорь Игоряныч

Весь смысл этого кода в том, что каждая строка проверяется регулярным выражением, и если re.match возвращает None т.е. не находит совпадение то функция возвращает False

import re

file = 'Ли [email protected] 58\nВолочкова [email protected] 49\nОльга [email protected] 58'

pattern = '\s*[a-zA-Zа-яА-Я]+\s+[\w\.-]+@[\w\.-]+(?:\.[\w]+)+\s+[1-9][0-9]\s*$'

def is_valid(file):
    for line in file.splitlines():
        if not re.match(pattern, line): return False
    return True

print(is_valid(file))
→ Ссылка
Автор решения: Начинающий DS

100% будет работать вот на такой простыне. В качестве приятного бонуса, код сформирует два .txt файла с логами, где будут плохие и хорошие строки:)

class NotNameError(Exception):
    pass

class NotEmailError(Exception):
    pass

def check(line):
    name, mail, age = line.split(' ')
    symbols = ('@', '.')
    age = int(age)
    if name.isalpha() is False:
        raise NotNameError
    elif age not in range(10,100):
        raise ValueError()
    else:
        for char in symbols:
            if char not in mail:
                raise NotEmailError
    return line

with open('registrations_.txt', mode='r', encoding='utf-8') as ff:
    for line in ff:
        line = line[:-1]
        try:
            string = check(line)
        except NotNameError:
            bad = open ('registration_bad.log', mode='a', encoding='utf-8')
            bad.write(line + 'Имя содержит цифры' + '\n')
            bad.close()
        except NotEmailError:
            bad = open ('registration_bad.log', mode='a', encoding='utf-8')
            bad.write(line + 'Некорректно указан E-mail' + '\n')
            bad.close()
        except ValueError:
            bad = open ('registration_bad.log', mode='a', encoding='utf-8')
            bad.write(line + 'Неверные данные' + '\n')
            bad.close()
        else:
            good = open('registraton_good.log', mode='a', encoding='utf-8')
            good.write(line + '\n')
            good.close()

ff.close()
→ Ссылка