Простой парсер почтовых адресов на Python

Привет всем! Совсем недавно я писал о некоторых идеях, относящихся к запросу: парсер почтовых адресов на Python. Что же — от слов к делу, подумал я, и доделал-таки код 🙂 Да, над конечным кодом, доступным по ссылке еще можно поработать и навести красоту, но — что получилось, то получилось.

А получилось у нас:
— перебор файлов в указанной папке
— сбор почтовых адресов из этих файлов
— удаление дубликатов из конечного списка

  1. import os
  2. import re
  3. import glob
  4. import time
  5. from os import listdir
  6. from os.path import isfile
  7. from os.path import join as joinpath
  8.  
  9. #Запрашиваем адрес рабочей папки, вводим его в переменную path
  10. path = str(input('Где находятся исходные файлы? : \n'))
  11.  
  12. #Обрабатываем введенную ссылку для получения стандартного стиля с двумя слешами
  13. regxp = '[\w-]+[\w:]'
  14. result = re.findall(regxp, path) #Разбиваем введенный адрес на составляющие без обратного слеша
  15. path = '\\\\'.join(result) #Добавляем двойной слеш после каждой папки (под формат Python)
  16.  
  17. file_for = str(input('В какую папку будем сохранять полученные результаты? :\n'))
  18. regxp = '[\w-]+[\w:]'
  19. file_for_result = re.findall(regxp, path)  # Разбиваем введенный адрес на составляющие без обратного слеша
  20. file_for_result = '\\\\'.join(file_for_result)  # Добавляем двойной слеш после каждой папки (под формат Python)
  21.  
  22. mail_list = str(input('Как назовем файл для результатов? :\n'))
  23. directory_for_base = file_for_result + mail_list
  24. print('Сохраняем все в файл: ', mail_list)
  25.  
  26. delete_files = int(input('Обработанные файлы удаляем? 1 - да, 2 - нет: \n'))
  27. if delete_files == 1: #Ветка с удалением обработанных файлов
  28.     os.chdir(path)  # Переходим по указанному адресу
  29.     print('Считаем количество файлов для обработки... \n')
  30.     all_files = len([name for name in os.listdir('.') if os.path.isfile(name)])  # Считаем количество файлов
  31.     print('Предстоит обработать файлов: ', all_files)
  32.     time.sleep(2)
  33.     for file in glob.glob('*.*'):
  34.         print(file)
  35.         print('Предстоит обработать файлов: ', all_files)
  36.         with open(file, 'r', encoding='utf8') as f:
  37.             pars = f.read()
  38.             reg = '[\w.-]+@[A-Za-z-]+\.[\w.]+'
  39.             result = re.findall(reg, pars)
  40.             print(result)
  41.             result = str(result)
  42.             result = result.split()
  43.             print('В итоге получили: ', result)
  44.             print(len(result))
  45.             print('А теперь попробуем очистить: \n')
  46.             finallist = []
  47.             for i in result:
  48.                 mailadress = i.replace('[', '').replace(']', '').replace('"', '').replace(',', '').replace('\'', '')
  49.                 with open(directory_for_base, 'a', encoding='utf8') as f:
  50.                     f.write(mailadress + '\n')
  51.                     all_files = all_files - 1
  52.         os.remove(file)
  53.     clearlist = []
  54.     with open(directory_for_base, 'r', encoding='utf8') as f:
  55.         for line in f:
  56.             mailadress = f.readline()
  57.             clearlist.append(mailadress)
  58.             print('Что получили из файла насыпью без чистки на дубли: ')
  59.             print(clearlist)
  60.             clearlist = list(set(clearlist))
  61.             print('Что получили после чистки на дубли: ')
  62.             print(clearlist)
  63.         for i in clearlist:
  64.             with open('ok_base.txt', 'a', encoding='utf8') as f:
  65.                 f.write(i)
  66.     print('Все!')
  67.  
  68. elif delete_files == 2: #Ветка без удаления обработанных файлов
  69.     os.chdir(path)  # Переходим по указанному адресу
  70.     print('Считаем количество файлов для обработки... \n')
  71.     all_files = len([name for name in os.listdir('.') if os.path.isfile(name)])  # Считаем количество файлов
  72.     print('Предстоит обработать файлов: ', all_files)
  73.     time.sleep(3)
  74.     for file in glob.glob('*.*'):
  75.         print(file)
  76.         print('Предстоит обработать файлов: ', all_files)
  77.         with open(file, 'r', encoding='utf8') as f:
  78.             pars = f.read()
  79.             reg = '[\w.-]+@[A-Za-z-]+\.[\w.]+'
  80.             result = re.findall(reg, pars)
  81.             print(result)
  82.             result = str(result)
  83.             result = result.split()
  84.             print('В итоге получили: ', result)
  85.             print(len(result))
  86.             print('А теперь попробуем очистить: \n')
  87.             finallist = []
  88.             for i in result:
  89.                 mailadress = i.replace('[', '').replace(']', '').replace('"', '').replace(',', '').replace('\'', '')
  90.                 with open(directory_for_base, 'a', encoding='utf8') as f:
  91.                     f.write(mailadress + '\n')
  92.         all_files = all_files - 1
  93.     clearlist = []
  94.     with open(directory_for_base, 'r', encoding='utf8') as f:
  95.         for line in f:
  96.             mailadress = f.readline()
  97.             clearlist.append(mailadress)
  98.             print('Что получили из файла насыпью без чистки на дубли: ')
  99.             print(clearlist)
  100.             clearlist = list(set(clearlist))
  101.             print('Что получили после чистки на дубли: ')
  102.             print(clearlist)
  103.         for i in clearlist:
  104.             with open('ok_base.txt', 'a', encoding='utf8') as f:
  105.                 f.write(i)
  106.     print('Все!')

Сам код выглядит следующим образом:

Спасибо за внимание!
Как всегда — комментарии, мысли, возражения — прошу на почту.