9.Работа с файлами
На егэ встречаются задания, в которых нужно обработать файл с большим объёмом данных, такой объём сложно обрабатывать в ручную,
поэтому научимся работать с файлами. Для начала откроем файл:
f = open("text.txt", "r")
У функции open есть разные параметры, но нам необходимо знать только 2:
- Имя файла (в кавычках);
- Режим, по которому можно определить, как мы сможем работать с файлом.
Режимов существует несколько, но в рамках данного курса будет рассмотрено только 2:
- Режим "r" (от слова read) используется для чтения файла;
- Режим "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. Тесты и практика отсутствуют из-за сложности адекватной реализации.