На Горох
Информатика, 10 класс

§ 68. Работа с файлами

"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.

Объяснение темы В оглавлении: § 68. Работа с файлами

Кратко о теме

Файл — именованная область данных на внешнем носителе, например на диске компьютера. В отличие от данных, которые программа хранит только в оперативной памяти, файл сохраняется после завершения программы и доступен при следующем запуске. Чтобы обмениваться данными с файлом, программа открывает его и получает файловый объект. Режим открытия задаёт, можно ли читать, записывать или добавлять данные. Конструкция with помогает безопасно завершить работу и автоматически закрыть файл.

Объяснение темы

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

Определения и обозначения

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

Файловый объект — объект программы, через который выполняют чтение из файла или запись в него. Его обычно связывают с переменной, чтобы обращаться к открытому файлу по имени этой переменной. Например, после открытия файла можно вызвать у объекта метод чтения. Такой объект служит посредником между программой и данными на носителе.

Режим открытия — указание функции open(), определяющее, для чего открывают файл: чтения, записи или добавления данных. Режим сообщают при открытии, чтобы программа знала, какую операцию собирается выполнять пользователь. От выбора режима зависит и то, что произойдёт с прежним содержимым. Поэтому режим нужно выбирать до начала обмена данными.

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

Как это устроено

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

Чтобы начать работу, функции open() передают имя файла или путь к нему и режим доступа. Путь нужен, если файл расположен не в текущей папке программы; если указан только имя, Python ищет его в текущей папке. Результат open() связывают с файловой переменной, через которую затем читают или записывают данные. Для управляемого закрытия удобно сразу открыть файл в конструкции with.

Режим влияет на то, какие операции разрешены и сохранится ли старое содержимое. Режим r открывает существующий файл для чтения и не меняет его. Режим w предназначен для записи: он создаёт новый файл, если такого нет, но очищает прежний, если файл уже существует. Режим a добавляет данные в конец и сохраняет то, что было записано раньше.

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

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

Режимы открытия файлов и их назначение

РежимНазначениеЧто происходит, если файл уже существуетЧто происходит, если файла нет
r — чтениеПолучение данных без изменения содержимогоФайл открывается для чтенияВозникает ошибка
w — записьЗапись новых данныхПрежнее содержимое очищаетсяСоздаётся новый файл
a — добавление в конецДобавление новых данных после прежнихСтарые данные сохраняются, новые добавляются в конецСоздаётся новый файл

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

Разбор задач

Открыть текстовый файл для чтения и вывести его содержимое

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

  1. Укажи имя или путь к существующему файлу и режим r.
  2. Свяжи файловый объект с переменной, например f, в конструкции with open("notes.txt", "r") as f:.
  3. Внутри блока получи текст вызовом f.read() и выведи его с помощью print().

Пример записи строки программы: текст = f.read(), затем print(текст). Если файл расположен не в текущей папке, укажи правильный путь. Ответ: программа прочитает содержимое notes.txt и выведет его на экран, не меняя файл.

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

Пусть программа получила несколько числовых результатов и должна сохранить каждый с новой строки. Открываем файл в режиме w: если файла ещё нет, он будет создан. Поскольку write() принимает строки, числа преобразуем в текст, а между записями явно добавим символ перевода строки \n.

  1. Подготовь список результатов, например результаты = [12, 25, 38].
  2. Открой файл с режимом w внутри with: with open("results.txt", "w") as f:.
  3. Перебери значения циклом и записывай каждое так: f.write(str(значение) + "\n").

Преобразование str() превращает число в строку, а \n отделяет одну запись от следующей. Если файл уже существовал, режим w сначала удалит его прежнее содержимое, поэтому перед запуском убедись, что это допустимо. Ответ: в results.txt появятся результаты, каждый на отдельной строке.

Добавить новую запись в конец существующего файла, не удаляя прежние данные

Здесь важно сохранить записи, которые уже есть в файле, и дописать только новую. Режим w не подходит, потому что очистил бы содержимое; выбираем a. Работу выполняем через with, а к новой записи при необходимости добавляем перевод строки.

  1. Открой файл в режиме добавления: with open("journal.txt", "a") as f:.
  2. Подготовь новую запись в виде строки, например запись = "Новая запись".
  3. Внутри блока выполни f.write(запись + "\n"), чтобы следующая запись при дальнейшем добавлении началась с новой строки.

В режиме a новые данные помещаются в конец файла, а старые остаются на месте. Если файла ещё нет, Python создаст его. Ответ: journal.txt сохранит прежние записи и получит новую запись в конце.

Типичные ошибки

Ошибка: открыть существующий файл в режиме w, рассчитывая дописать данные и сохранить старый текст. Так делают, потому что w часто воспринимают просто как «запись», не учитывая его особенность: прежнее содержимое очищается при открытии. Если нужно продолжить файл, выбирай a. Перед запуском проверь режим и подумай, допустима ли потеря прежних данных.

Ошибка: пытаться читать в режиме w или записывать в режиме r. Такое несоответствие возникает, когда режим выбирают по привычке, а не по цели программы. Режим r предназначен для чтения, w и a — для записи. Проверь себя вопросом: какое действие выполняется с файловым объектом и разрешает ли его выбранный режим?

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

Ошибка: ожидать, что write() сам преобразует число в строку или добавит переход на следующую строку. Метод записывает переданную строку без такого автоматического форматирования, поэтому число нужно преобразовать через str(), а разделитель добавить явно. Это часто забывают, когда запись кажется похожей на вывод через print(). Проверь тип значения и наличие \n в том месте, где нужна новая строка.

Связь с другими темами

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

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

Что запомнить

  • Функция open() открывает файл и возвращает файловый объект.
  • Режим открытия определяет, какие операции разрешены и как изменится содержимое файла.
  • Режим w может удалить прежнее содержимое существующего файла.
  • Режим a добавляет новые данные в конец файла.
  • Конструкция with автоматически закрывает файл после завершения блока.
  • Метод write() записывает строку; перевод строки при необходимости добавляют явно.

Частые вопросы по теме

Зачем программе открывать файл, если данные уже есть в переменных?

Переменные хранят данные во время работы программы, но обычно эти данные исчезают после её завершения. Файл позволяет сохранить результаты надолго, а затем прочитать их при следующем запуске или использовать в другой программе.

Чем режимы w и a отличаются друг от друга?

Режим w предназначен для записи и очищает прежнее содержимое файла, если тот уже существует. Режим a тоже позволяет записывать, но помещает новые данные в конец, сохраняя старые.

Что произойдёт, если открыть для чтения файл, которого нет?

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

Зачем использовать with, если файл можно закрыть вручную?

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

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

Метод write() записывает строковые данные, а число является значением другого типа. Поэтому число сначала преобразуют, например с помощью str(число), а затем передают в write().

Спросить по теме параграфа

§ 68. Работа с файлами

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
10 класс
Учебник
"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.