Глава 15 · Python и файлы

Читаем файлы: read(), readline(), readlines()

Один и тот же файл можно прочитать по-разному — и выбор способа — это выбор, а не формальность.

read() — весь файл целиком

read_ves.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    content = f.read()
read() — не всегда плохо
Для небольших файлов читать всё сразу — просто и удобно. Для очень больших файлов (гигабайты логов) это может занять много памяти — тогда лучше читать построчно или порциями (раздел 15.23). Не одно решение всегда правильное — важно выбирать под задачу.

readline() — по одной строке

readline.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    print(f.readline())   # первая строка
    print(f.readline())   # вторая строка
    # ...
    print(repr(f.readline()))   # '' — когда строк больше нет
Debug Lab 4: read() вместо readline()
odna_stroka.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    first_line = f.read()   # хотели одну строку
    second_line = f.read()
    print("Первая:", first_line)
    print("Вторая:", repr(second_line))
Первая: яблоки\nхлеб\nмолоко\nсыр\n
Вторая: ''
Что видно на экране

Ожидалось, что каждый вызов вернёт одну строку — но read() без аргумента читает весь оставшийся файл, а не одну строку. Курсор сразу оказался в конце, и второй вызов вернул пустую строку.

Исправленный код
odna_stroka_fixed.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    first_line = f.readline()
    second_line = f.readline()
    print("Первая:", first_line.strip())
    print("Вторая:", second_line.strip())

Цикл по файлу — предпочтительный способ

cikl_po_fajlu.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())
Объект файла — итерируемый
Как и список или строка (глава 10), объект файла можно обходить циклом for напрямую — Python сам читает по одной строке за раз, не загружая весь файл в память.

readlines() — все строки списком

readlines_spisok.py
with open("spisok.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

print(len(lines), "строк")
СпособЧто возвращаетПамять
for line in fileпо одной строке за разэкономно — подходит для больших файлов
file.readlines()список всех строк сразувесь список строк в памяти одновременно
Практика: read(), readline(), readlines()
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →