
Полная версия
Быстрый Python. автоматизация рутинных задач за неделю
def поздороваться_по_имени(имя): print(‘Привет,’, имя, ‘! Добро пожаловать в мир автоматизации!’)
Теперь, когда мы будем вызывать эту функцию, мы обязаны указать в скобках то значение, которое будет подставлено вместо слова ‘имя’ внутри функции. Например, поздороваться_по_имени(‘Алексей’) или поздороваться_по_имени(‘Excel-таблица’). Функция станет гораздо более гибкой и полезной.
Функции, которые что-то возвращают
Часто нам нужно не просто что-то сделать (например, напечатать текст), а получить какой-то результат для дальнейшей работы. Представьте калькулятор. Вы вводите два числа и нажимаете кнопку ‘плюс’. Калькулятор не просто пишет результат на экране – он его вычисляет и отдает вам. В мире функций за это отвечает ключевое слово return (что переводится как вернуть).
Создадим функцию, которая принимает два числа и возвращает их сумму.
def сложить(а, b): результат = а + b return результат
Что здесь происходит? Функция получает два числа (их значения будут подставлены вместо а и b). Внутри она создает переменную ‘результат’, куда записывает сумму. И затем команда return отправляет значение этой переменной туда, откуда функцию вызвали. Это важно понять. Сама по себе функция сложить(5, 3) в коде ничего не напечатает. Она просто вычислит число 8 и вернет его. А что с этим числом делать дальше – решаете вы. Можно сразу напечатать: print(сложить(5, 3)). Можно сохранить в переменную для будущих расчетов: мой_результат = сложить(5, 3). А можно даже передать это число в другую функцию. Возвращаемое значение – это и есть главный продукт, который производит наш волшебный ящик.
Зачем это нужно в автоматизации
Теперь давайте спустимся с небес теории на землю практики. Вспомните любую свою рутинную задачу. Например, ежемесячное составление отчета. В нем всегда одни и те же шаги: взять данные из одного файла, очистить их от лишних строк, посчитать итоги по столбцам, оформить в красивую таблицу и сохранить в новом файле. Каждый из этих шагов – идеальный кандидат в функцию. Вы пишете функцию ‘взять_данные_из_файла’, функцию ‘очистить_данные’, функцию ‘посчитать_итоги’. Ваш основной скрипт при этом превращается из длинного, запутанного текста в чистый и понятный план:
данные = взять_данные_из_файла(‘отчет_май.csv’) чистые_данные = очистить_данные(данные) итоги = посчитать_итоги(чистые_данные) сохранить_отчет(итоги, ‘итоговый_отчет_май.xlsx’)
Выглядит, как инструкция на человеческом языке, не правда ли? А самое прекрасное происходит, когда на следующий месяц вам нужно сделать то же самое, но с файлом ‘отчет_июнь.csv’. Вам не нужно переписывать весь скрипт! Вы просто меняете имя входного файла в первой строке. Вся сложная логика спрятана внутри функций, которые уже написаны и проверены. Если вы найдете ошибку в очистке данных, вам нужно будет исправить ее только в одном месте – внутри функции ‘очистить_данные’, и она автоматически поправится во всех ваших скриптах, где эта функция используется.
Подумайте на минутку о своих повторяющихся действиях за компьютером. Может, это переименование фотографий по шаблону ‘отпуск_2024_01.jpg’? Или еженедельная рассылка писем с одним и тем же текстом, но разными именами в адресной строке? Каждое такое действие – это готовая функция, которая только ждет, когда вы ее опишете. Вы уже чувствуете, как ваш будущий скрипт обретает структуру, становясь не грудой команд, а набором осмысленных блоков?
Немного магии: аргументы по умолчанию
Иногда вашей функции нужны не все данные каждый раз. Некоторые параметры могут быть стандартными, наиболее часто используемыми. Python позволяет задавать для параметров значения по умолчанию. Синтаксис прост: в объявлении функции вы пишете параметр со знаком равенства и значением. Например, функция создания папки. Обычно вы создаете ее в текущей директории, но иногда нужно указать другой путь.
def создать_папку(имя_папки, родительский_путь=‘.’): полный_путь = os.path.join(родительский_путь, имя_папки) os.mkdir(полный_путь)
Здесь ‘.’ – это условное обозначение текущей папки. Теперь, если вы вызовете функцию как создать_папку(‘НоваяПапка’), она создаст папку ‘НоваяПапка’ прямо там, где находится ваш скрипт. Но если вам нужно создать ее где-то еще, вы можете явно указать второй аргумент: создать_папку(‘НоваяПапка’, ‘C:/Документы’). Это невероятно удобно, так как делает функции еще более гибкими и умными, избавляя вас от необходимости постоянно указывать очевидные вещи.
Функции – это краеугольный камень, на котором строится не только автоматизация, но и все программирование в целом. Они превращают хаос операций в порядок, повторяющееся – в однократное, сложное – в простое. Не стремитесь сразу написать идеальную, универсальную функцию на все случаи жизни. Начните с малого. Выделите в вашем следующем скрипте хотя бы один повторяющийся кусок кода, оберните его в def, дайте честное имя. Вы удивитесь, насколько понятнее и короче станет ваш код. И помните, каждая новая функция – это еще один кирпичик в стене, которая защищает ваше время от нашествия рутины.
Работа с файлами и исключениями
Представьте себе рабочий стол после большого проекта. Фотографии, документы, таблицы, архивы – всё свалено в кучу, как в шкафу после генеральной уборки, когда всё выбросил, а разбирать уже нет сил. Теперь представьте, что у вас есть помощник, который молча, быстро и без ошибок рассортирует всё по папкам: картинки – в одну, отчеты – в другую, старые версии – в архив. Этот помощник – ваш скрипт для работы с файлами, и сегодня мы его создадим. Работа с файлами – это основа основ автоматизации. Всё, с чем мы имеем дело на компьютере, – это файлы. Текст, картинки, настройки, базы данных. Научившись управлять ими с помощью кода, вы получите в руки волшебную палочку для наведения цифрового порядка.
Писать код, который работает в идеальных условиях, несложно. Сложно написать код, который не сломается, когда что-то пойдёт не так. А с файлами что-то идёт не так очень часто: нужный файл удалён, диск переполнен, у вас нет прав на запись, а кто-то забыл закрыть документ в редакторе. Если не подготовиться к таким сбоям, ваш красивый скрипт-помощник вместо порядка устроит настоящий цифровой потоп. Поэтому вторая половина нашей сегодняшней встречи посвящена исключениям – это механизм в Python, который позволяет предвидеть неприятности и обрабатывать их так, чтобы скрипт не падал с грохотом, а вежливо сообщал, что пошло не по плану, и шёл дальше.
Открытие и чтение: знакомство с содержимым
Всё начинается с открытия. В Python для работы с файлом нужно его открыть, указав путь к нему и режим работы. Режимы – это как ключи от разных дверей. ‘r’ – ключ только для чтения (read), ‘w’ – для записи (write, при этом старое содержимое файла стирается!), ‘a’ – для добавления (append) в конец файла. Просто представьте, что у вас есть блокнот. Режим ‘r’ – вы только смотрите в него. Режим ‘w’ – вы берёте чистый лист и пишете заново. Режим ‘a’ – вы перелистываете на последнюю страницу и дописываете новые мысли.
Когда файл открыт, можно читать его содержимое. Самый простой способ – прочитать всё сразу в одну строку. Но часто удобнее читать файл построчно, особенно если это лог-файл или конфигурация. После того как работа с файлом закончена, его нужно обязательно закрыть – сказать системе, что вы освободили его, и другие программы могут с ним работать. Это как вернуть книгу в библиотеку. Забыть закрыть файл – плохая привычка, которая может привести к ошибкам. Python помогает нам и тут: есть специальная конструкция ‘with’, которая автоматически закроет файл, как только вы выйдете из её блока. Это надёжнее и чище, поэтому мы будем использовать именно её.
Вспомните последний раз, когда вам приходилось искать что-то в большом текстовом отчёте или вытаскивать данные из лога. Как долго вы это делали? А теперь представьте, что три строки кода делают это за секунду, читая файл и проверяя каждую строку на нужное вам ключевое слово. Это и есть тот самый момент, когда рутина превращается в магию.
Запись и сохранение: оставляем след
Чтение – это хорошо, но настоящая сила – в изменении мира, то есть диска. Запись в файл позволяет вашему скрипту сохранять результаты работы: новый очищенный список, обработанные данные, отчёт об ошибках. Тут важно помнить про режим ‘w’. Он безжалостен. Если вы откроете существующий файл в режиме ‘w’ и что-то в него запишете, всё старое содержимое исчезнет навсегда. Это как взять тетрадь с годовым отчётом и начать писать на первой странице список покупок. Поэтому будьте осторожны: перезаписывайте только то, что не жалко, или создавайте копии. Режим ‘a’ безопаснее – он только добавляет, но и он может раздуть файл до гигантских размеров, если добавлять в него без остановки.
Частая задача – прочитать один файл, обработать данные и записать результат в другой. Это классическая операция преобразования. Например, у вас есть CSV-файл с товарами, где цены указаны в долларах, а вам нужен файл с ценами в рублях. Скрипт читает исходный файл, для каждой строки пересчитывает цену по курсу и записывает новую строку в другой файл. Исходный файл остаётся нетронутым, а вы получаете нужный результат. Задумайтесь на минуту, какие данные в вашей работе или личной жизни нужно регулярно переводить из одного формата в другой? Возможно, это отчёты из одной программы, которые нужно подготовить для загрузки в другую. Именно такие задачи – идеальные кандидаты для автоматизации.
Что-то пошло не так: встречаем исключения
А теперь давайте смоделируем маленькую аварию. Ваш скрипт пытается открыть файл ‘secret_plans.txt’, но его нет на диске. Без подготовки интерпретатор Python остановится и выведет на экран красное пугающее сообщение ‘FileNotFoundError’. Для вас, сидящего за компьютером, это нестрашно. Но если этот скрипт запущен ночью на сервере и должен обработать сотни файлов, одна ошибка остановит всю работу. Вот для этого и нужна обработка исключений.
Исключение – это специальный сигнал в программе, который говорит: ‘Эй, тут случилось что-то, с чем я не знаю, как справиться!’. Наш задача – перехватить этот сигнал и сказать программе, что делать в такой ситуации. Конструкция для этого называется try-except. Вы ‘пытаетесь’ (try) выполнить рискованный кусок кода, например, открыть файл. Если всё идёт хорошо, блок ‘except’ игнорируется. Если возникает ошибка (то самое исключение), выполнение кода немедленно перепрыгивает в блок ‘except’, где вы можете обработать проблему: вывести понятное сообщение, создать отсутствующий файл, пропустить проблемное место и продолжить работу.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.









