Python с нуля: автоматизация повседневных задач

Практический курс для абсолютных новичков, желающих быстро освоить Python для решения реальных проблем без сложного ООП, как советуют на [habr.com](https://habr.com/ru/articles/988966/). Вы изучите базовый синтаксис, управляющие конструкции и работу с файлами, чтобы сразу начать писать полезные скрипты.

1. Основы синтаксиса и переменные

Основы синтаксиса и переменные

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

Язык Python стал стандартом для автоматизации рутины именно благодаря своей простоте. Его код читается почти как обычный текст на английском языке. В этом материале мы разберем фундамент: как писать команды, как сохранять данные и как заставить скрипт работать с текстом и числами.

Базовый синтаксис: как выглядит код

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

Функция вывода

Самая первая и важная команда, с которой начинается изучение любого языка — это вывод информации на экран. В Python за это отвечает встроенная функция print().

Эта команда позволяет скрипту «общаться» с вами. Когда вы напишете программу для переименования сотен фотографий, именно с помощью print() скрипт сможет сообщить вам: «Обработано 50 файлов из 100» или «Работа успешно завершена».

Комментарии

Вторая важнейшая часть синтаксиса — комментарии. Это заметки в коде, которые предназначены только для человека. Компьютер полностью их игнорирует. В Python однострочный комментарий начинается с символа решетки #.

> Комментарии — это ваше послание самому себе в будущее. Когда вы откроете свой скрипт через полгода, чтобы что-то в нем изменить, именно комментарии помогут быстро вспомнить, за что отвечает каждая строка.

Отступы

Во многих языках программирования для группировки команд используются фигурные скобки. Python пошел другим путем: он использует отступы (пробелы в начале строки). Это делает код визуально чистым и заставляет программистов писать аккуратно.

Обычно для одного уровня отступа используются 4 пробела. Если вы поставите пробел там, где он не нужен, программа выдаст ошибку. Пока мы будем писать команды друг под другом без отступов, но как только перейдем к условиям и циклам, отступы станут критически важными.

Переменные: коробки для хранения данных

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

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

!Схема работы переменных в памяти

Чтобы создать переменную, нужно придумать ей имя, поставить знак равенства = (оператор присваивания) и указать значение.

Теперь, если вы напишете print(files_count), на экране появится число 15. Значение переменной можно менять в любой момент работы программы — отсюда и название «переменная».

Правила именования переменных

Чтобы код работал корректно и легко читался, придумывать имена для «коробок» нужно по определенным правилам:

  • Имя может состоять только из латинских букв, цифр и знака подчеркивания _.
  • Имя не может начинаться с цифры (например, 1_folder вызовет ошибку, а folder_1 — сработает).
  • В Python принято использовать стиль snake_case (змеиный регистр): слова пишутся с маленькой буквы и разделяются подчеркиванием. Например: backup_folder_path, max_retries, user_age.
  • Называйте переменные так, чтобы было понятно, что внутри. Имя x = 10 ни о чем не говорит. Имя days_to_delete = 10 сразу объясняет суть.

    Базовые типы данных

    Компьютер должен понимать, с чем именно он работает. Одно дело — сложить два числа, и совсем другое — объединить два куска текста. В Python есть несколько основных типов данных, которые покрывают 99% повседневных задач.

    1. Строки (str)

    Строка (string) — это любой текст. Чтобы интерпретатор понял, что перед ним текст, а не команда, строку обязательно нужно брать в кавычки (одинарные или двойные — не имеет значения).

    Строки можно складывать друг с другом. Этот процесс называется конкатенацией.

    2. Целые числа (int)

    Целое число (integer) — это числа без дробной части. Они используются для подсчета количества объектов, номеров строк, дней и так далее. Пишутся без кавычек.

    С числами можно выполнять любые математические операции: сложение `, вычитание , умножение и деление .

    3. Вещественные числа (float)

    Вещественное число (float) — это число с дробной частью. Важно: для отделения дробной части используется точка, а не запятая.

    4. Логический тип (bool)

    Логический тип (boolean) может принимать только одно из двух значений: True (Истина) или False (Ложь). Обязательно пишутся с большой буквы и без кавычек. Они работают как переключатели (флаги) и незаменимы, когда скрипт должен принять решение.

    | Тип данных | Обозначение | Пример значения | Зачем нужен в автоматизации | | :--- | :--- | :--- | :--- | | Строка | str | "backup.zip" | Хранение путей к файлам, имен, URL-адресов | | Целое число | int | 150 | Подсчет количества обработанных документов | | Вещественное число | float | 2.5 | Расчет размера файлов в мегабайтах, задержки времени | | Логический тип | bool | True | Проверка, существует ли нужная папка на диске |

    Преобразование типов и F-строки

    Частая ошибка новичков — попытка сложить строку и число.

    Этот код выдаст ошибку TypeError. Компьютер не понимает, как математически прибавить цифру к тексту. Чтобы это исправить, нужно временно превратить число в строку с помощью функции str().

    Однако в современном Python есть гораздо более удобный и элегантный инструмент — F-строки (f-strings). Они позволяют встраивать переменные прямо внутрь текста.

    Чтобы создать f-строку, нужно поставить английскую букву f перед кавычками, а переменные поместить в фигурные скобки {}.

    Это невероятно полезно при автоматизации. Например, вам нужно каждый день создавать папку с текущей датой. Вы просто создаете переменную с датой и подставляете ее в f-строку: f"C:/Backups/backup_{current_date}"`.

    Практический пример: расчет стоимости хранения

    Давайте объединим все изученное и напишем простой скрипт. Представьте, что вы арендуете облачное хранилище. Базовый тариф включает 50 ГБ, а за каждый дополнительный гигабайт вы платите 2 доллара. Нам нужно рассчитать итоговую стоимость и вывести красивый отчет.

    Если вы запустите этот код, интерпретатор подставит все значения, выполнит математику (вычтет 50 из 85, получит 35, затем умножит 35 на 2.0) и выведет готовый текст: «Использовано: 85 ГБ. Перерасход составил 35 ГБ. К доплате: 70.0 USD.».

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

    2. Условия и циклы

    Условия и циклы

    Скрипты, которые выполняют команды строго сверху вниз, полезны, но их возможности ограничены. Настоящая автоматизация начинается тогда, когда программа умеет принимать решения и повторять рутинные действия без вашего участия. Представьте, что вы разбираете почту: вы не просто перекладываете все письма в одну стопку, а смотрите на адресата. Счета отправляются в одну папку, личные письма — в другую, а спам летит в корзину.

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

    Условные операторы: как скрипт принимает решения

    Условный оператор — это конструкция, которая позволяет выполнять определенный кусок кода только в том случае, если выполняется заданное правило. В Python для этого используется ключевое слово if (если).

    Синтаксис выглядит как обычное предложение на английском языке. После слова if пишется само условие, затем ставится двоеточие. Со следующей строки с обязательным отступом (обычно 4 пробела) пишутся команды, которые нужно выполнить.

    В этом примере интерпретатор проверяет: правда ли, что значение переменной больше 100? Если да (результат — это True), то команды с отступом выполнятся. Если бы размер файла был равен 50, компьютер просто проигнорировал бы этот блок кода и пошел дальше.

    Операторы сравнения

    Чтобы формулировать условия, используются математические знаки сравнения. Большинство из них вам знакомы со школы, но есть одно критически важное отличие.

    | Знак в коде | Что означает | Пример использования | | :--- | :--- | :--- | | > | Больше | | | < | Меньше | | | >= | Больше или равно | | | <= | Меньше или равно | | | == | Равно (проверка) | | | != | Не равно | |

    > Самая частая ошибка новичков — путаница между = и ==. Одиночное равно = — это команда «положить значение в коробку» (присваивание). Двойное равно == — это вопрос к компьютеру: «Равны ли эти два значения?». Если вы напишете if a = 5:, программа выдаст ошибку.

    Альтернативные пути: else и elif

    Часто нам нужно не просто выполнить действие при совпадении условия, но и предусмотреть запасной план. Для этого используется слово else (иначе).

    Если вариантов развития событий больше двух, на помощь приходит elif (сокращение от else if — «иначе если»). Вы можете добавлять сколько угодно проверок elif между if и else.

    !Схема работы условного оператора при сортировке файлов

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

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

    Логические связки: and, or, not

    Иногда для принятия решения нужно учесть сразу несколько факторов. Например, вы хотите удалить файл, только если он старый и занимает много места. Для объединения условий используются логические операторы.

  • and (И) — требует, чтобы оба условия были правдивыми.
  • or (ИЛИ) — сработает, если хотя бы одно условие правдиво.
  • not (НЕ) — переворачивает результат (правду делает ложью, а ложь — правдой).
  • Циклы: автоматизация рутины

    Условия делают скрипт умным, а циклы делают его неутомимым. Цикл — это конструкция, которая заставляет компьютер повторять один и тот же блок кода несколько раз. В Python есть два основных вида циклов: while и for.

    Цикл while (пока)

    Цикл while работает по принципу: «Делай это, пока условие остается истинным». Он идеально подходит для ситуаций, когда вы заранее не знаете, сколько раз придется повторить действие.

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

    При запуске этого кода программа проверит: ? Да. Выведет текст, прибавит 25. Затем снова проверит: ? Да. И так до тех пор, пока переменная downloaded_mb не станет равна 100. Как только условие станет ложным (False), цикл остановится.

    > Важно: При работе с while всегда следите за тем, чтобы условие когда-нибудь стало ложным. Если вы забудете добавить строку downloaded_mb = downloaded_mb + 25, переменная навсегда останется нулем, и скрипт будет печатать сообщение бесконечно. Это называется «бесконечный цикл».

    Цикл for (для каждого)

    Если while ждет выполнения условия, то цикл for берет готовый набор элементов и проходит по каждому из них по очереди. Это самый частый инструмент в автоматизации: применить действие для каждого файла в папке, для каждой строки в таблице, для каждого письма в ящике.

    Чтобы понять for, нам нужно познакомиться с базовой коллекцией данных — списком (list). Список — это просто несколько значений, записанных через запятую внутри квадратных скобок [].

    Разберем синтаксис по словам:

  • for — начало цикла.
  • current_file — новая переменная, которую мы придумываем прямо здесь. В нее по очереди будут попадать значения из списка.
  • in — ключевое слово «в».
  • files_to_process — список, по которому мы идем.
  • Интерпретатор сам возьмет первый элемент ("report.xlsx"), положит его в current_file, выполнит print(). Затем вернется наверх, возьмет второй элемент ("photo.jpg"), и так до конца списка. Вам не нужно вручную считать элементы или останавливать цикл — Python сделает все сам.

    Практический пример: умный фильтр файлов

    Давайте объединим списки, цикл for и условный оператор if, чтобы написать прототип реального скрипта.

    Задача: у нас есть список файлов из папки «Загрузки». Нам нужно найти среди них только изображения (файлы, заканчивающиеся на .jpg) и подсчитать их количество.

    Как работает этот код: Скрипт поочередно берет каждое имя из списка downloads. Внутри цикла он натыкается на развилку if. Если имя заканчивается на .jpg, скрипт радостно сообщает об этом и добавляет единицу к счетчику images_count. Если нет — срабатывает блок else, и файл просто игнорируется. В самом конце, когда цикл завершил работу со всеми пятью элементами, программа выводит итоговое число.

    Понимание того, как вкладывать условия внутрь циклов — это ключевой навык. Именно так работают программы, которые массово переименовывают фотографии, удаляют старые логи с серверов или собирают данные из сотен Excel-таблиц в один отчет.

    3. Функции и использование модулей

    Функции: ваши личные мини-программы

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

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

    Как создать функцию

    В Python создание функции начинается с ключевого слова def (от английского define — определить). Затем идет имя функции, круглые скобки и двоеточие. Со следующей строки с отступом пишется сам код.

    В этом примере мы «научили» компьютер новой команде greet_user(). Пока мы ее не вызовем, код внутри нее выполняться не будет.

    Аргументы и результат (return)

    Настоящая польза функций раскрывается, когда они могут принимать исходные данные и возвращать готовый результат. Вернемся к аналогии с кофеваркой: вода и зерна — это аргументы (то, что мы кладем внутрь), а готовый кофе — это возвращаемое значение.

    !Иллюстрация работы функции: она принимает исходные данные (аргументы), обрабатывает их внутри себя и выдает готовый результат

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

    Ключевое слово return — это команда «отдай результат и заверши работу». Как только функция выполняет return, она передает обработанные данные обратно в основную программу, где мы можем сохранить их в новую переменную cleaned_file.

    Модули: инструменты из коробки

    Вы научились писать собственные функции, но что, если нужная вам задача уже решена кем-то другим? Python славится своим подходом «батарейки в комплекте». Вместе с языком поставляется огромная библиотека готовых решений для самых разных задач: от математических вычислений до скачивания сайтов.

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

    Работа с датой и временем

    Представьте, что вам нужно ежедневно создавать папку для резервных копий, и в названии папки должна быть текущая дата. Писать логику календаря с нуля — безумие. Вместо этого мы возьмем встроенный модуль datetime.

    Синтаксис datetime.date.today() читается так: «Зайди в модуль datetime, найди там раздел date и вызови функцию today()».

    Взаимодействие с операционной системой

    Для автоматизации рутины на компьютере вам понадобится модуль os (от Operating System). Он позволяет скрипту «видеть» файлы на вашем жестком диске, создавать папки и удалять документы.

    Практический пример: массовое переименование

    Теперь объединим все знания из этого и предыдущих уроков (переменные, циклы, условия, функции и модули), чтобы создать мощный скрипт.

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

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

    4. Чтение и запись файлов

    Чтение и запись файлов: наделяем скрипты памятью

    До сих пор все наши программы страдали от «амнезии». Переменные, списки и результаты работы функций существовали только в оперативной памяти компьютера. Как только скрипт завершал работу, все данные бесследно исчезали. Если мы хотели отфильтровать список файлов или посчитать расходы, нам приходилось заново вписывать исходные данные прямо в код программы.

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

    Анатомия работы с файлом

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

  • Найти нужный блокнот и открыть его.
  • Прочитать текст или записать новый.
  • Закрыть блокнот и положить его на место.
  • Для первого шага используется встроенная функция open(). Она сообщает операционной системе, что ваша программа хочет получить доступ к определенному документу.

    У функции open() есть три главных аргумента:

  • Имя файла (путь к нему).
  • Режим работы (что именно мы собираемся делать).
  • Кодировка (правила, по которым компьютер понимает символы).
  • Режимы работы (mode)

    Когда вы открываете файл, вы должны сразу сказать Python, каковы ваши намерения. Это защищает данные от случайного удаления. Основных режимов три:

    | Режим | Обозначение | Описание и поведение | | :--- | :--- | :--- | | Чтение | 'r' (от read) | Используется по умолчанию. Позволяет только читать данные. Если файла не существует, программа выдаст ошибку. | | Запись | 'w' (от write) | Создает новый пустой файл для записи. Осторожно: если файл с таким именем уже существует, он будет полностью стерт и перезаписан! | | Добавление | 'a' (от append) | Открывает файл и добавляет новые данные в самый конец, не удаляя старый текст. Если файла нет, создает новый. |

    !Схема работы с файлами в Python

    Проблема кодировки

    Текст в компьютере хранится в виде чисел. Кодировка — это таблица-переводчик, которая говорит компьютеру, какое число соответствует букве «А», а какое — символу «@».

    Исторически сложилось так, что операционная система Windows часто использует свои специфические кодировки. Если вы попытаетесь открыть файл с русским текстом без указания правильной кодировки, вы можете получить ошибку или увидеть непонятные символы (так называемые «кракозябры»). Чтобы этого избежать, всегда добавляйте параметр encoding='utf-8'. Это современный мировой стандарт, который поддерживает все языки мира.

    Безопасное открытие: менеджер контекста

    Самая частая ошибка новичков — открыть файл, сделать с ним что-то и забыть закрыть с помощью команды close(). Если файл не закрыт, он остается заблокированным в оперативной памяти. Вы не сможете удалить его или переместить, пока не перезапустите программу. А если во время записи произойдет ошибка, часть данных может не сохраниться.

    Чтобы не держать в голове необходимость закрытия файлов, в Python придумали менеджер контекста — конструкцию with.

    Давайте разберем этот синтаксис:

  • Ключевое слово with открывает «безопасную зону».
  • open(...) открывает файл в режиме записи ("w").
  • as file означает «сохрани этот открытый файл в переменную с именем file».
  • Далее идет блок кода с отступом. Все, что написано с отступом, работает с открытым файлом.
  • Как только отступы заканчиваются, Python автоматически закрывает файл. Даже если внутри произойдет критическая ошибка, файл будет безопасно закрыт.
  • Обратите внимание на символ \n в конце первой строки. Это специальный невидимый символ переноса строки. Метод write() не нажимает клавишу Enter за вас. Если вы не добавите \n, весь текст склеится в одну длинную нечитаемую колбасу.

    Чтение данных из файла

    Представьте, что у нас есть файл shopping_list.txt, в котором записаны продукты для покупки. Мы хотим прочитать его содержимое.

    Если файл небольшой, мы можем прочитать его целиком за один раз с помощью метода read():

    Метод read() берет весь текст из файла и превращает его в одну большую строку (тип данных string). Это удобно для коротких заметок. Но что, если файл весит 5 гигабайт (например, это лог-файл сервера за год)? Попытка загрузить его целиком приведет к тому, что у компьютера закончится оперативная память, и программа зависнет.

    Построчное чтение

    Для работы с большими объемами данных профессионалы используют построчное чтение. Файловый объект в Python работает как коллекция строк. Это значит, что мы можем использовать цикл for, с которым познакомились в предыдущих уроках, чтобы перебирать файл строчка за строчкой.

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

    Здесь мы использовали строковый метод strip(). Зачем он нужен? Когда вы нажимаете Enter в текстовом редакторе, в файл записывается тот самый невидимый символ \n. Функция print() тоже по умолчанию добавляет перенос строки. Если не использовать strip(), между нашими строками при выводе на экран появятся лишние пустые интервалы. Метод strip() аккуратно отрезает все пробелы и переносы по краям строки.

    Практический пример: автоматизация обработки отчета

    Теперь объединим все наши знания: переменные, условия, циклы, функции и работу с файлами.

    Сценарий: Вы работаете в отделе продаж. Каждое утро система выгружает файл raw_orders.txt. В нем вперемешку записаны успешные заказы, отмененные заказы и просто пустые строки из-за сбоя системы. Ваша задача — вытащить оттуда только успешные заказы, привести их к единому виду (сделать все буквы заглавными) и сохранить в новый чистый файл approved_orders.txt.

    Исходный файл raw_orders.txt выглядит так: > заказ 101 - успешен > > ЗАКАЗ 102 - отменен > заказ 103 - УСПЕШЕН > > заказ 104 - ошибка оплаты

    Напишем скрипт для автоматизации этой рутины:

    Что мы сделали в этом скрипте? Мы создали конвейер. Данные заходят из файла raw_orders.txt, проходят через фильтр в виде нашей функции process_order(), которая отсеивает мусор и форматирует текст. Затем очищенные данные сразу же записываются в новый файл approved_orders.txt.

    Использование конструкции with для двух файлов одновременно гарантирует, что оба документа будут корректно закрыты после завершения работы цикла. Даже если в исходном файле будет миллион строк, наш скрипт обработает их за пару секунд, не зависнет и сэкономит вам часы монотонной ручной работы.

    5. Практика автоматизации задач

    Практика автоматизации задач

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

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

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

    Сценарий 1: Уборка в папке «Загрузки»

    Знакомая ситуация: папка Downloads (или «Загрузки») на вашем компьютере со временем превращается в цифровую свалку. Там вперемешку лежат картинки, рабочие PDF-документы, установочные файлы и архивы. Найти нужный файл становится все сложнее.

    Мы напишем скрипт, который проанализирует содержимое этой папки и автоматически разложит файлы по категориям: картинки — в одну папку, документы — в другую.

    Для работы с файловой системой компьютера нам понадобятся два встроенных модуля Python:

  • os (от Operating System) — позволяет программе «видеть» файлы и папки, прямо как вы видите их в проводнике.
  • shutil (от Shell Utilities) — работает как виртуальные руки: может копировать, перемещать и удалять файлы.
  • !Схема работы скрипта сортировки файлов

    Пишем код сортировщика

    Как это работает?

    В этом скрипте мы объединили все базовые концепции:

  • Переменные и строки: Мы сохранили пути к папкам в переменные source_folder, documents_folder и images_folder. Это строковый тип данных.
  • Списки: Функция os.listdir() просматривает папку и возвращает список (list), состоящий из имен всех файлов внутри.
  • Цикл for: Мы берем этот список и перебираем его элемент за элементом. Переменная filename на каждом шаге цикла принимает значение нового имени файла.
  • Условия if/elif: С помощью строкового метода .endswith() (который проверяет, заканчивается ли строка на указанный текст) мы задаем правила. Если файл заканчивается на .jpg — отправляем его к картинкам. Если на .pdf — к документам.
  • > Обратите внимание на функцию os.path.join(). Она безопасно склеивает пути к файлам, автоматически подставляя правильные слеши (косые черты) в зависимости от того, работаете вы на Windows или Mac.

    Сценарий 2: Массовое переименование файлов

    Представьте, что вы фотограф или бухгалтер. У вас есть папка с сотней файлов, которые называются IMG_001.jpg, IMG_002.jpg или report_1.xlsx, report_2.xlsx. Вам нужно добавить к каждому файлу текущую дату или название проекта, чтобы получилось 2023_Project_IMG_001.jpg.

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

    Здесь магия происходит благодаря базовой операции со строками — конкатенации (сложению). Когда мы пишем prefix + filename, Python просто берет строку "2023_Q4_" и приклеивает к ней строку "report_1.xlsx". Затем функция os.rename() получает старый адрес файла и новый адрес, мгновенно меняя название документа на жестком диске.

    Сценарий 3: Извлечение важных данных из текста

    Автоматизировать можно не только работу с самими файлами, но и с их содержимым. Допустим, система безопасности вашего сайта или корпоративной программы каждый день генерирует текстовый лог-файл (server_log.txt). В нем тысячи строк: информация о входах пользователей, системные уведомления и ошибки.

    Ваша задача — найти все ошибки (строки, содержащие слово "ERROR") и сохранить их в отдельный файл для отправки программистам. Читать тысячу строк глазами невозможно.

    Используем знания из предыдущего урока о чтении и записи файлов:

    В этом скрипте мы используем оператор in. Это невероятно удобный инструмент Python, который проверяет, содержится ли одна строка внутри другой. Если условие "ERROR" in line оказывается истинным (True), скрипт берет эту конкретную строку и копирует ее в новый документ.

    Золотые правила безопасности при автоматизации

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

    Чтобы ваши первые шаги в автоматизации были безопасными, соблюдайте три правила:

  • Тренируйтесь на кошках. Никогда не запускайте новый, только что написанный скрипт на папке с важными рабочими документами или семейными фотографиями. Создайте тестовую папку, скопируйте туда 5–10 ненужных файлов и проверяйте код на них.
  • Используйте холостой ход (print). Прежде чем использовать команды os.rename() или shutil.move(), закомментируйте их (поставьте знак # в начале строки) и напишите вместо них print(new_file_path). Так скрипт просто выведет на экран текст того, что он собирается сделать. Вы сможете проверить, правильно ли формируются новые имена и пути, не меняя реальные файлы.
  • Абсолютные пути надежнее. В примерах выше мы использовали полные пути (например, C:/Users/User/Downloads). Это называется абсолютным путем. Он гарантирует, что скрипт будет работать именно с той папкой, с которой нужно, независимо от того, откуда вы его запустили.
  • Автоматизация — это навык, который окупается мгновенно. Потратив 20 минут на написание скрипта сегодня, вы сэкономите часы монотонной работы в будущем. Начните с малого: найдите самую скучную задачу, которую вы делаете на компьютере каждый день, и попробуйте поручить ее Python.