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

На егэ встречаются задания, в которых нужно обработать файл с большим объёмом данных, такой объём сложно обрабатывать в ручную, поэтому научимся работать с файлами. Для начала откроем файл: f = open("text.txt", "r")

У функции open есть разные параметры, но нам необходимо знать только 2:

  1. Имя файла (в кавычках);
  2. Режим, по которому можно определить, как мы сможем работать с файлом.

Режимов существует несколько, но в рамках данного курса будет рассмотрено только 2:

  1. Режим "r" (от слова read) используется для чтения файла;
  2. Режим "w" (от слова write) используется для записи в файл, если в файле что-то было записано изначально, то после записи предыдущая информация стирается.

Мы можем закрыть файл: f = open("text.txt", "r")

f.close()

Закрытие файла предназначено для того, чтобы не занимать ресурсы системы, поэтому процедура закрытия считается обязательной, но в программах часто бывают сбои (ошибки), например: f = open("text.txt", "r")

a = "s" + 5 # TypeError: can only concatenate str (not "int") to str

f.close()

Из-за 3 строки программа прерывается, файл не закрывается. Поэтому лучше открывать файл следующим образом: with open("text.txt", "r") as f:
print(f.read())

Мы воспользовались так называемым оператором with ... as, с ним нет необходимости самостоятельно закрывать файл, это произойдёт автоматически, в том числе, если возникнет ошибка в программе.

Методы файлов

Для каждого режима свои методы.

Все примеры представлены с файлов text.txt, который содержит 3 строки:
Hello
World
123

Разберём способы прочитать файл:

  • f.read() - читает файл f целиком: with open("text.txt", "r") as f:
    text = f.read()
    print(text)
    Вывод:
    Hello
    World
    123
  • f.readlines() - читает весь файл f целиком, но по строкам, записав каждую как элемент списка. Список можно использовать как итерируемый объект: with open("text.txt", "r") as f:
    text = f.readlines()
    print(text)
    Вывод:
    ['Hello\n', 'World\n', '123\n'] with open("text.txt", "r") as f:
    for line in f.readlines():
    print(line, end='')
    Вывод:
    Hello
    World
    123

    У функции print есть свой перенос строки, поэтому мы его отключает с помощью end=''

    Для итерирования есть более лаконичный вариант, который будет работать также: with open("text.txt", "r") as f:
    for line in f:
    print(line, end='')
    Вывод:
    Hello
    World
    123

Способ записи разберём только один: with open("text.txt", "w") as f:
f.write("Python\nHello!")
Теперь в файле находится следующий текст:
Python
Hello!

P.S. Тесты и практика отсутствуют из-за сложности адекватной реализации.