Подробное руководство о том, как автоматизировать работу с файлами и отправлять электронные письма с помощью 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.