Как прочитать файл построчно в Python?
Лежит текстовый файл, надо обойти его построчно и что-то сделать с каждой строкой. Гуглю «как читать файл построчно python», но в одних примерах read(), в других readlines(), в третьих просто цикл по файлу. Что правильнее и не сожрёт ли это всю память на большом файле?
2 ответа
Самый правильный способ — цикл прямо по объекту файла. Он читает по одной строке за раз и не загружает весь файл в память, поэтому работает даже на гигабайтных логах:
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).
Если хочется получить именно список строк (например, чтобы потом их отсортировать), используйте readlines():
with open('data.txt', encoding='utf-8') as f:
lines = f.read().splitlines()
splitlines() сразу режет по переводам строк и не оставляет \n на концах — удобнее, чем readlines(). Но помните: оба варианта держат весь файл в памяти, для построчной обработки больших файлов лучше обычный цикл по f.