Чтение текстового файла
Уроки курсаЧтение текстового файла
До этого урока мы работали с данными, которые уже были написаны прямо в коде — строки, списки, словари. Но в реальных задачах данные хранятся в файлах, и их нужно оттуда читать. Именно этим мы и займёмся: откроем текстовый файл и разберём, как Python с ним работает.
Открытие файла: функция open(), режим 'r' и кодировка utf-8
Точка входа в работу с файлом — встроенная функция open(). Она принимает несколько аргументов, и важно понять каждый из них.
Минимальный вызов выглядит так:
f = open('data.txt', 'r', encoding='utf-8')
Первый аргумент — путь к файлу. Можно указать просто имя файла, если он лежит в той же папке, что и скрипт, или полный путь, если файл в другом месте.
Второй аргумент — режим открытия. Строка 'r' означает «только чтение». В этом режиме файл должен уже существовать — если файла нет, Python выбросит FileNotFoundError. Режим 'r' стоит по умолчанию, то есть если не передать второй аргумент вовсе, Python откроет файл именно для чтения. Тем не менее писать его явно — хорошая привычка: код становится понятнее.
Третий аргумент — encoding='utf-8'. Файл на диске хранится как последовательность байт. Чтобы Python превратил эти байты в строки, ему нужно знать кодировку. UTF-8 — самая распространённая кодировка для текстовых файлов, и она корректно обрабатывает кириллицу. Если не указать encoding явно, Python возьмёт кодировку из системных настроек — на Windows это часто cp1251, на Linux и macOS — utf-8. Из-за этого один и тот же скрипт может читать файл правильно на одной машине и выдавать кашу символов на другой. Поэтому encoding='utf-8' стоит писать всегда.
Что возвращает open()? Она возвращает файловый объект, который также называют дескриптором файла. Это не сами данные из файла — это специальный объект, который представляет открытое соединение с файлом и предоставляет методы для чтения. В примере выше мы связали этот объект с именем f.
Дескриптор — это своего рода «канал» к файлу. Пока он открыт, через него можно читать данные. После того как работа с файлом завершена, дескриптор нужно закрыть — иначе операционная система продолжает держать файл занятым. Как именно обеспечить закрытие правильно — разберём в следующей секции.
