Подробное руководство о том, как автоматизировать работу с файлами и отправлять электронные письма с помощью Python.

В последние несколько дней я посвятил свое время проекту, целью которого является автоматизация манипулирования большими наборами файлов, а также использование учетных записей электронной почты с помощью Python. Окончательную версию кода вы можете найти здесь.

Предложение проекта

Я представил себя сотрудником компании, которая управляет различными торговыми центрами, разбросанными по территории Бразилии. В каждом штате, где работает компания, есть конкретный сотрудник, который будет нести ответственность за анализ данных торговых центров в его/ее местонахождении (например, сотрудник, размещенный в штате Рио-де-Жанейро, должен анализировать отчеты торговые центры Рио-де-Жанейро).

Моя роль в этой ситуации состоит в том, чтобы получить все отчеты, подготовленные компанией, собрать их в соответствии с их соответствующим состоянием и отправить их соответствующему сотруднику. Все файлы, полученные мной, смешаны вместе и никак не разделены.

Изображение выше является фрагментом из моего текущего каталога. Вы можете видеть, что я получил несколько отчетов о торговых центрах, которые необходимо организовать. Также заметно, что каждое имя файла содержит аббревиатуру названия штата, в котором работает указанный торговый центр. Например, первый файл в списке имеет AM перед расширением .csv. Это указывает на то, что Amazonas Shopping находится в штате Амазонас.

Кроме того, в моем каталоге есть лист Excel, содержащий всю информацию, необходимую для отправки электронной почты каждому аналитику.

Я преобразовал таблицу этого файла в фрейм данных pandas, используя read_excel.

Глядя на фрейм данных, мы видим, что наша компания управляет торговыми центрами в 5 разных бразильских штатах — Амазонас (AM), Гояс (GO), Минас-Жерайс (MG), Рио-де-Жанейро (RJ) и Сан-Паулу (SP). . Кроме того, лист сообщает нам имя и адрес электронной почты каждого аналитика.

Процесс разделения файлов

Чтобы помочь нам с разделением файлов, мы можем создать список со всеми состояниями, упомянутыми в столбце «Состояние», из фрейма данных «сотрудники».

Создав список, мы можем выполнить итерацию по нашему каталогу и сгруппировать файлы в соответствии с аббревиатурами имен их состояний (помните, что их можно найти прямо перед расширением .csv).

Приведенный выше код показывает, что Python ищет все файлы CSV, имя которых содержит аббревиатуру имени штата, действующую в цикле for. При обнаружении отчета, соответствующего этому критерию, программа записывает его в zip-файл, содержащий другие отчеты в формате CSV, которые также имеют такое же сокращение имени штата в своем имени. В итоге мы получим набор zip-файлов, каждый из которых содержит исключительно отчеты, относящиеся к определенному состоянию из списка «состояния». Например, код создаст файл с именем «SP.zip», в котором можно найти только отчеты о торговых центрах штата Сан-Паулу.

Теперь, когда мы организовали файлы, пришло время отправить их соответствующему аналитику.

Отправка электронной почты

Имея на руках zip-файлы, моей задачей было создать алгоритм, который мог бы корректно отправить их нужному аналитику. Моя идея заключалась в том, чтобы использовать информацию из фрейма данных «сотрудников» для создания zip-объекта, в котором хранятся данные каждого сотрудника.

Имея в руках zip-объект «информация», мы могли бы просто создать цикл for для отправки электронных писем.

В алгоритме отправки электронной почты я использовал библиотеки smtplib, mimetypes и email.message. Чтобы вставить свой пароль для входа в мою учетную запись электронной почты, я использовал объект getpass из библиотеки getpass; он генерирует экран ввода, который избегает отображения символов, вставленных на экран.

Результаты кода

В итоге алгоритм выдал невероятный результат, каждый отдельный аналитик отчетов мог получить соответствующие файлы из своего состояния.

Я сделал скриншоты некоторых примеров полученных писем.

  • Во-первых, мы видим, что Педро Алвес, аналитик отчета из Гояса, мог получить файлы торговых центров из своего штата.

  • Кроме того, Паула Гонсалвеш из Минас-Жерайс могла получить нужные ей файлы.

Заключительные соображения

Выполнение этой задачи было, без сомнения, отличным опытом, который расширил мои возможности в Python. Несмотря на кажущуюся простую задачу, разделение файлов и отправка электронной почты потребовали от меня много усилий, чтобы добиться наилучшего способа кодирования алгоритмов.

Я надеюсь, что эта статья познакомила вас с некоторыми идеями о том, как организовать большие наборы файлов на вашем компьютере и что нужно сделать, чтобы отправлять сообщения электронной почты через Python.

Если вам понравился мой проект, добавьте меня на GitHub. У меня также есть аккаунт LinkedIn!

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.