Перед тем, как рассматривать способы чтения информации из файла, договоримся, что в одной папке с программой у нас будет файл 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>