← Все вопросы

Как прочитать файл построчно в Python?

Задан 22 месяца назад612 просмотров2 ответа
9

Лежит текстовый файл, надо обойти его построчно и что-то сделать с каждой строкой. Гуглю «как читать файл построчно python», но в одних примерах read(), в других readlines(), в третьих просто цикл по файлу. Что правильнее и не сожрёт ли это всю память на большом файле?

2 ответа

14
✓ Принятый ответ — помог автору

Самый правильный способ — цикл прямо по объекту файла. Он читает по одной строке за раз и не загружает весь файл в память, поэтому работает даже на гигабайтных логах:

with open('data.txt', encoding='utf-8') as f:
    for line in f:
        print(line.rstrip('\n'))

Конструкция with сама закроет файл, даже если внутри случится ошибка. rstrip('\n') убирает символ перевода строки, который тянется в конце каждой строки.

Чем это лучше альтернатив:

  • f.read() — читает весь файл одной строкой в память. Удобно для мелких файлов, опасно для больших.
  • f.readlines() — возвращает список всех строк сразу, тоже грузит всё в память.

Частая ошибка — забыть encoding='utf-8'. На Windows кодировка по умолчанию часто cp1251, и русский текст превратится в кракозябры или вылетит UnicodeDecodeError. Всегда указывайте кодировку явно.

Если нужен номер строки, оберните в enumerate(f, start=1).

5

Если хочется получить именно список строк (например, чтобы потом их отсортировать), используйте readlines():

with open('data.txt', encoding='utf-8') as f:
    lines = f.read().splitlines()

splitlines() сразу режет по переводам строк и не оставляет \n на концах — удобнее, чем readlines(). Но помните: оба варианта держат весь файл в памяти, для построчной обработки больших файлов лучше обычный цикл по f.

Ваш ответ

Войдите, чтобы ответить на вопрос.