Как исключить адреса электронной почты из определенного домена и извлечь остальные Python - PullRequest
0 голосов
/ 13 марта 2019

У меня есть список адресов электронной почты, некоторые из которых относятся к соответствующим доменам, а другие - из спамовых / нерелевантных доменов электронной почты. Я хочу захватить оба этих, но в отдельных списках. Я знаю, откуда берутся соответствующие (всегда один и тот же домен - @gmail.com, но спам от разных, и все они должны быть перехвачены).

    # Extract all email ids from a JSON file
    import re
    import json

     with open("test.json", 'r') as fp:
         json_decode = json.loads(fp.read())

         line = str(json_decode)

         match = re.findall(r'[\w\.-]+@[\w.-]+', line)
         l = len(match)
         print(match)

         for i in match:
             domain = match.split('@')[i]


        OUTPUT: match = ['image001.png@01D36CD8.2A2219D0', 'arealjcl@countable.us', 'taylor.l.ingram@gmail.com']

Первые два являются спамом, а третий - законным адресом электронной почты, поэтому они должны быть в разных списках. Я делю на @, чтобы определить домен, или исключаю все, что не @gmail.com и помещаю в другой список.

Ответы [ 3 ]

1 голос
/ 13 марта 2019

Я бы рекомендовал вам использовать функцию endswith().Вот как это можно использовать:

legit = []
spam = []

# We iterate through the list of matches
for email in match:

    # This checks if the email ends with @gmail.com.
    # If it returns True, that means it is a good email.
    # But, if it returns False, then it means that the email
    # is spam.
    email_status = email.endswith("@gmail.com")


    if email_status == False:
        spam.append(email)

    else:
        legit.append(email)

РЕДАКТИРОВАТЬ: Изменен код, чтобы он правильно отвечал на ваш вопрос

0 голосов
/ 13 марта 2019

Вы можете разделить их на два списка по определенным соответствующим доменам

 # extract all email ids from a json file
 import re
 import json

 relevant_domains = ['@gmail.com'] # you can add more

 with open("test.json", 'r') as fp:
     json_decode = json.loads(fp.read())

     line = str(json_decode)

     match = re.findall(r'[\w\.-]+@[\w.-]+', line)
     l = len(match)
     print(match)

     relevant_emails = []
     spam_emails = []

     for email in match:
         domain = email.split('@')[1]

         if domain in relevant_domains:
             relevant_emails.append(email)
         else:
             spam_emails.append(email)
0 голосов
/ 13 марта 2019

Когда вы разделяете адреса электронной почты на '@', вы получаете список из двух элементов:

In [3]: 'image001.png@01D36CD8.2A2219D0'.split('@')
Out[3]: ['image001.png', '01D36CD8.2A2219D0']

Если вы хотите проверить домен , индексируйте второй элемент результата:

In [4]: q = 'image001.png@01D36CD8.2A2219D0'.split('@')

In [5]: q[1]
Out[5]: '01D36CD8.2A2219D0'

Так что ваш цикл for будет больше похож на:

In [9]: for thing in match:
   ...:     domain = thing.split('@')[1]
   ...:     print(domain)
   ...:     
01D36CD8.2A2219D0
countable.us
gmail.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...