Читать книгу Быстрый Python. автоматизация рутинных задач за неделю - - Страница 6

Часть 1. Основы Python для автоматизации
Работа с файлами и исключениями

Оглавление

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

Писать код, который работает в идеальных условиях, несложно. Сложно написать код, который не сломается, когда что-то пойдёт не так. А с файлами что-то идёт не так очень часто: нужный файл удалён, диск переполнен, у вас нет прав на запись, а кто-то забыл закрыть документ в редакторе. Если не подготовиться к таким сбоям, ваш красивый скрипт-помощник вместо порядка устроит настоящий цифровой потоп. Поэтому вторая половина нашей сегодняшней встречи посвящена исключениям – это механизм в 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’, где вы можете обработать проблему: вывести понятное сообщение, создать отсутствующий файл, пропустить проблемное место и продолжить работу.

Быстрый Python. автоматизация рутинных задач за неделю

Подняться наверх