Значение регулярного выражения не совпадает с идентификаторами электронной почты из CSV - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь выполнить базовую проверку на наличие идентификаторов электронной почты в файле CSV.Я не знаю, почему он не проходит тщательную проверку «если».

import csv
import re
input_file = open("test_list.csv", "r").readlines()
print(len(input_file))
csv_reader = csv.reader(input_file)
line_count = 0
try:
    for row in csv_reader:
        line_count += 1
        print('Checking ' + str(line_count) + ' of ' + str(len(input_file)))
        name = {row[0]}
        email = list({row[2]})
        print(str(email[0]))
        print('Checking contact name'+str(name))
        regex = '^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$'
        match = re.match(regex,str(email[0]))
        if match == None :
            print("Bad Email")
        else:
            print("Good Email") 
        print('')
        print('')
except IndexError as error:
    print('Checked all the data')

Мой CSV-файл выглядит так:

bhanu1, singh2, bha.nu@gmail.com
bhanu2, singh2, bhadoxit.com
bhanu3, singh2, bhan@esnotexit.com

Мой вывод:

3
Checking 1 of 3
 bha.nu@gmail.com
Checking contact nameset(['bhanu1'])
Bad Email

Checking 2 of 3
 bhadoxit.com
Checking contact nameset(['bhanu2'])
Bad Email

Checking 3 of 3
 bhan@esnotexit.com
Checking contact nameset(['bhanu3'])
Bad Email

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Все ваши адреса электронной почты начинаются с пробела, потому что вы не обрезаете соседние пробелы.

Кроме того, ваш код имеет большое количество очень странных и обходных способов манипулирования вашими данными.Вот рефакторинг со встроенными комментариями.

import csv
import re

input_file = open("test_list.csv", "r").readlines()
print(len(input_file))

csv_reader = csv.reader(input_file)
# Compile regex once, use multiple times inside loop
regex = re.compile(
    r'^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$')
try:
    for line_count, row in enumerate(csv_reader, 1):
        print('Checking {0} of {1}'.format(line_count, len(input_file)))
        # Don't make a set out of this
        name = row[0]
        # Don't make a list out of this; trim spaces
        email = row[2].strip()
        print(email)
        print('Checking contact name {}'.format(name))
        match = regex.match(email)
        if match is None:
            print("Bad Email")
        else:
            print("Good Email") 
        print('')
except IndexError as error:
    print('Checked all the data')

Обработка try / except все еще странная, и чтение файла в память и затем чтение его как CSV довольнонеуклюжий.

0 голосов
/ 13 февраля 2019

В вашем выводе вы можете увидеть пространство перед вашей электронной почтой.Если вы удалите это, оно должно работать нормально.Просто добавьте strip() в ваш код для соответствия.

match = re.match(regex,str(email[0]).strip())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...