Перед тем, как рассматривать способы чтения информации из файла, договоримся, что в одной папке с программой у нас будет файл data.txt со следующим содержимым:
Hello World!
You're the best!
Чтобы прочитать файл полностью, нужно использовать метод read():
data = open('data.txt', 'r')
**content = data.read()**
# После этого в переменной content будет такое значение:
"""
Hello World!
You're the best!
"""
data.close()
Он достаточно удобный для маленьких текстовых файлов с одной строкой, но большие многострочные файлы с его помощью обрабатывать не очень удобно, поскольку на строки его придётся разбивать самостоятельно.
Чтобы прочитать весь файл в виде списка строк, существует метод readlines():
data = open('data.txt', 'r')
**content = data.readlines()**
# Выведется ['Hello World!\\n', "You're the best!"]
****print(content)
data.close()
Как можно заметить, он оставляет в конце символы переноса, которые при необходимости нужно удалять вручную.
Недостаток этих двух методов в том, что они возвращают нам целый файл. Это нормально для небольших файлов, но если вдруг вам придётся обрабатывать файлы размером в несколько гигабайт, то он может просто не влезть в оперативную память.
Чтобы избежать проблем с оперативной памятью, можно воспользоваться способами построчного чтения файлов.
Первый способ — перебрать файл в цикле for. Да-да, именно так 😉
data = open('data.txt', 'r')
for line in data:
print(line)
data.close()
Hello World!
You're the best!
Обратите внимание на лишнюю пустую строку в выводе. Она появляется по той же причине, что и в методе readlines(): оба способа оставляют переносы строки, которые при необходимости нужно удалять самостоятельно.
Второй способ — метод readline() (не путайте с readlines()). Он позволяет прочитать одну строчку файла за раз. При этом повторный вызов метода вернёт следующую строчку, а не ту же самую:
data = open('data.txt', 'r')
hello = data.readline()
best = data.readline()
print(hello)
print(best)
data.close()
Hello World!
You're the best!
Программа вывела то же самое (даже перенос строки в первой переменной остался), но строки теперь разнесены по двум разным переменным, что может быть удобно в некоторых ситуациях.
<aside>
👉 Перебрать файл циклом можно после вызова метода readline(), в таком случае цикл переберёт все оставшиеся строки.
</aside>