mr-ZA
@mr-ZA

Регулярки в python?

Всем привет, обращаюсь потому что уже все мозги сломал, думаю весь день. В общем есть файл(log.txt) следующего содержания:
https://dropmefiles.com/nDxU0

Задача в том, чтобы:
1) Спарсить файл и найти e-mail адреса, в коде (mail_unfiltered = [])
2) Отфильтровать список на похожие, в коде (mail_list = [])
3) После подсчитать сколько раз определенное мыло отправляло сообщения и вывести в файл результата {мыло:сколько раз отправляло сообщение}

(В коде функция def parse_key(key) которую я не осилил) соответственно решено было просто передать в функцию мыло из фильтрованного списка ( mail_list[] ) по очереди и при сравнении с значением в нефильтрованном списке ( mail_unfiltered[] ) прибавлять счетчик количества на +1 но как это оформить я запутался, помогите, как записать именно функцию def parse_key? Остальной код пусть остается как есть. Пока в питоне плохо разбираюсь, код ниже, спасибо!

import os
import re
import numpy as np

def mkdir_cmd():
    if not os.path.exists(r".\results"):
        os.mkdir(r".\results")
        print(r'Dir made')

def parse_key(key):                                 #считаем сколько раз отправлял письма почтовый ящик из списка
    global mail_unfiltered
    mail_unfiltered_local = mail_unfiltered
    found_list = []
    count = 0

    for val in mail_unfiltered_local:

        if (val == key):
            found_list.append(val)
            count += 1                  #если встретили такое мыло увеличиваем счетчик отправок

    return found_list

def filter_list(list):
    new = []
    for i in list:
        if i not in new:        #availability in list <new[]> check
            new.append(i)
    return new

def get_data():
    global mail_list
    global mail_unfiltered
    #search for patterns
    countMail = 0
    countMessages = 0
    countSuccess = 0
    countError = 0
    i=0

    with open("maillog", "r") as file_read:

        for text in file_read:
            mail = re.findall(r'(from=<[a-z]+@+[a-z]+.\w\w>)', text)

            if (mail):
                mail_list.append(mail)
                mail_unfiltered.append(mail)
                print(mail)

    mail_list = filter_list(mail_list)      #filtering list on repeats
    print("\n" + "Filtered list: ")
    print(mail_list)

    print("\n" + "UnFiltered list: ")
    print(mail_unfiltered)
    print("\n")

    print("Length of filtered values in list: ")
    print(len(mail_list))
    print("\n")

    print("Length of unfiltered values in list: ")
    print(len(mail_unfiltered))
    print("\n")

    while i < len(mail_list):               # здесь надо спарсить нефильтрованный список и посчитать сколько раз e-mail отправлял письма
        str1 = ''.join(mail_list[i])
        print (parse_key(str1))
        i =+ 1

def main():
    mkdir_cmd()
    get_data()

mail_list = []                               # глобальная переменная, хранит список мыл без повторений
mail_unfiltered = []                         # глобальная переменная, хранит спарсенные повторяющиеся e-mail'ы

if __name__ == '__main__':
    main()
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
longclaps
@longclaps
import re
from collections import Counter

with open('maillog', 'r') as fi:
    for m, n in Counter(re.findall(r'(?<=\bfrom=<)[^>]+', fi.read(),
                                   flags=re.M)).most_common():
        print(f'{m:32}{n:>3}')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 140 000 до 190 000 руб.
Cashwagon Москва
от 150 000 руб.
от 120 000 до 180 000 руб.
25 мая 2019, в 08:45
1 руб./за проект
25 мая 2019, в 06:39
100 руб./за проект