Работа с файлами в Python
Открытие файла
Файловая переменная — имя переменной, которая ссылается на файловый объект
Имя файла — строковый литерал, задающий имя файла
Режим — строковый литерал, задающий режим доступа (чтение, запись и т.д.), в котором файл будет открыт
Кодировка — тип кодировки (например, UTF-8 при работе с текстовыми файлами)
Режимы
r: чтение
Поток будет открыт в режиме чтения
Файл, связанный с потоком должен существовать и быть доступным для чтения, в противном случае, функция open() вызывает исключение
w: запись
Поток будет открыт в режиме записи
Файл, связанный с потоком, не обязан существовать. Если его не существует, он будет создан. Если существует, он будет обрезан до нулевой длины (стерт). Если создание невозможно (например, из-за системных разрешений) функция open() вызывает исключение.
a: дозапись
Поток будет открыт в режиме дозаписи
Файл, связанный с потоком, не обязан существовать. Если его не существует, он будет создан. Если существует, виртуальная записывающая головка будет установлена в конец файла (предыдущее содержимое файла останется без изменений)
r+: чтение и обновление
Поток будет открыт в режиме чтения и обновления
Файл, связанный с потоком, должен существовать и быть доступным для записи, в противном случае функция open() вызывает исключение
Операции чтения и записи разрешены для потока
w+: запись и обновление
Поток будет открыт в режиме записи и обновления
Файл, связанный с потоком, не обязан существовать. Если его не существует, он будет создан. Предыдущее содержимое файла остается нетронутым
Операции чтения и записи разрешены для потока
Есть два типа режимов: текстовый и бинарный
Текстовый режим — для работы с текстом. Бинарный — для работы с другими типами данных.
По умолчанию файлы открываются в текстовом режиме. При работе с текстом указывать спецификатор t не нужно
Запись данных в файл
После открытия файла для выполнения операций с файлом используются методы файлового объекта
Файловая переменная — это переменная, которая ссылается на файловый объект
Строковое значение — символьная последовательность, которая будет записана в файл
Файл должен быть открыт для записи, либо произойдёт ошибка
Закрытие файла
После работы с файлом нужно применить метод файлового объекта close()
Это действие разрывает связь программы с файлом
Практика:
Напишите программу, которая записывает в файл три строковых значения — название страны и её столицу, например: "Россия: Москва"
Порядок действия следующий: файл должен открыться на запись, далее происходит запись трёх переменных, потом файл закрывается
Напишите функцию, которая принимает на вход словарь и строковое значение — название файла (итого два аргумента). В функции должна произойти запись в виде "ключ: значение" элементов словаря. Название файла, который нужно создать — второй аргумент функции.
Чтение данных из файла
Если файл был открыт для чтения, то для чтений всего его содержимого в оперативную память применяют метод файлового объекта read()
При вызове метода read() он возвращает содержимое файла в качестве строкового значения
Практика:
Создайте файл, сохраните в нём рецепт любого блюда
Прочитайте содержимое и напечатайте на экран
При вызове метода read() содержимое файла считывается полностью. Но часто программам требуется читать и обрабатывать хранящиеся в файле значения поочередно.
Для этого применяется метод readline(). Строка файла представляет собой символьную последовательность, завершающуюся символом \n. Этот метод возвращает строку файла как символьную последовательность, включая \n
Как Python понимает, что нужно считывать следующую строку? Когда файл открыт для чтения, для этого файла внутренне поддерживается специальное значение, которое называется позицией считывания. Она отмечает положение следующего значения, которое будет прочитано из файла.
Первоначально позиция считывания находится в начале файла.
После каждого вызова метода readline() она смещается на позицию после символа \n в файле
Конкатенация символа новой строки со строковым значением
Дозапись данных в существующий файл
Когда для открытия файла вывода используется режим 'w' и файл с указанным именем уже на диске существует, имеющийся файл будет удален, и будет создан новый пустой файл с тем же именем
Иногда есть необходимость оставить существующий файл и добавить в его текущее содержимое новые данные. В этом случае новые данные дописываются в конец данных, которые уже имеются в файле.
В Python режим 'a' используется для открытия файла вывода в режиме дозаписи, то есть:
Если файл уже существует, он не будет стерт, если файл отсутствует, он будет создан
Когда данные пишутся в файл, они будут дописываться в конец текущего содержимого файла
Практика:
Создайте файл с текстом
В режими дозаписи добавьте в него данные
Проверьте, как изменилось содержимое файла
Работа с числами
Числа из файлов всегда читаются в формате str
При записи в файл число нужно преобразовать в строку
Для этого используйте преобразование типов — функцию str():
Обратное преобразование — при помощи функции int():
Интерактив:
Какие три шага программа должна сделать, когда она использует файл?
Что присходит с уже существующим файлом при попытке открыть его как файл вывода (в режиме 'w')?
Какова задача открытия файла? Какова задача закрытия файла?
Что такое позиция считывания файла? Где она находится первоначально при открытии файла ввода?
Применение циклов для обработки файлов
Файлы обычно содержат большие объёмы данных, и в программах, как правило, применяется цикл, в котором обрабатываются данные, хранящиеся в файле
Мы знакомы с методом readline() для чтения файлов построчно
Если мы не знаем размер файла, мы можем воспользоваться циклом для определения конца файла. Метод readline() возвращает пустую строку, когда достигает конца файла.
Python позволяет итерироваться по файловому объекту. Так нам не нужно думать о том, когда будет достигнут конец файла — цикл закончится сам
Вы можете использовать чтение из файлов во всех ранее изученных конструкциях
Менеджеры контекста
Last updated