В Python читать файл построчно очень легко и удобно благодаря встроенным механизмам работы с файлами. Вот несколько основных способов, от самых простых до более специфичных.
1. Использование цикла For (самый распространенный и рекомендуемый способ)
Это наиболее "питоничный" и эффективный способ читать файл построчно, особенно когда файл большой. Файловый объект в Python является итератором, что позволяет ему автоматически читать по одной строке за раз.
Python
# Создадим тестовый файл (если его нет)
With open("my_file. txt", "w", encoding="utf-8") as f:
f. write("Это первая строка.\n")
f. write("Это вторая строка.\n")
f. write("И последняя строка.\n")
Print("— Чтение файла с помощью цикла for —")
Try:
with open("my_file. txt", "r", encoding="utf-8") as file:
for line in file:
print(line, end=») # end=» чтобы избежать двойных переводов строки (print сам добавляет \n)
Except FileNotFoundError:
print("Ошибка: Файл не найден.")
Пояснения:
- with open(…) as file:: Это контекстный менеджер. Он гарантирует, что файл будет Автоматически закрыт, даже если произойдет ошибка. Это очень важно для предотвращения утечек ресурсов. "r": Режим открытия файла для чтения (read). encoding="utf-8": Указывает кодировку файла. Рекомендуется всегда указывать кодировку, особенно для текстовых файлов, чтобы избежать проблем с отображением символов. UTF-8 — наиболее универсальная. for line in file:: Сама магия. Python читает файл строку за строкой, пока не достигнет конца. print(line, end=»): Каждая строка, прочитанная из файла, уже содержит символ нового строки (\n) в конце. Используя end=» в print, вы предотвращаете добавление дополнительного символа новой строки функцией print и избегаете двойных пустых строк в выводе.
2. Использование метода Readlines()
Этот метод читает Все строки файла сразу и возвращает их в виде Списка строк. Каждая строка в списке будет включать символ перевода строки (\n).
Python
Print("\n— Чтение файла с помощью readlines() —")
Try:
with open("my_file. txt", "r", encoding="utf-8") as file:
lines = file. readlines()
for line in lines:
print(line, end=»)
Except FileNotFoundError:
print("Ошибка: Файл не найден.")
Когда использовать Readlines():
- Когда вам нужен Весь контент файла в памяти в виде списка строк для дальнейшей обработки (например, для сортировки, фильтрации и т. д.). Когда файл относительно Небольшой, чтобы избежать проблем с памятью при загрузке всего содержимого.
Когда НЕ использовать Readlines():
- Для Очень больших файлов. Загрузка всего файла в память может привести к нехватке оперативной памяти и зависанию программы. В этом случае итерация через цикл for (как в способе 1) предпочтительнее.
3. Использование метода Readline() (для чтения по одной строке вручную)
Этот метод читает Одну строку из файла за раз. Если вызывается повторно, читает следующую строку. Возвращает пустую строку (»), когда достигнут конец файла.
Python
Print("\n— Чтение файла с помощью readline() —")
Try:
with open("my_file. txt", "r", encoding="utf-8") as file:
line = file. readline()
while line: # Цикл продолжается, пока строка не пуста (т. е. не EOF)
print(line, end=»)
line = file. readline()
Except FileNotFoundError:
print("Ошибка: Файл не найден.")
Когда использовать Readline():
- Когда вам нужен очень Точный контроль над чтением каждой строки, например, если вы хотите прочитать только первые N строк или остановить чтение при выполнении определенного условия. В специфических алгоритмах, где построчное чтение должно быть синхронизировано с другими операциями.
4. Дополнительные полезные методы при построечном чтении:
- Line. strip(): Удаляет пробельные символы (включая \n) с начала и конца строки. Это очень полезно, если вы не хотите, чтобы print() добавлял лишний перевод строки, и вам нужно работать с чистым содержимым строки.
Python
Print("\n— Чтение файла с. strip() —")
Try:
with open("my_file. txt", "r", encoding="utf-8") as file:
for line in file:
cleaned_line = line. strip() # Удаляем \n и другие пробелы по краям
if cleaned_line: # Можно добавить проверку, чтобы не печатать пустые строки
print(cleaned_line)
Except FileNotFoundError:
print("Ошибка: Файл не найден.")
Выбор способа:
- Для Большинства задач, где нужно просто обработать каждую строку файла: Используйте цикл For (Способ 1). Это самый эффективный, идиоматичный и безопасный способ. Если вам нужен Весь файл в памяти как список строк (и вы уверены, что он не слишком большой): Используйте Readlines() (Способ 2). Для Точного контроля над чтением одной строки за раз: Используйте Readline() (Способ 3).
Всегда используйте контекстный менеджер with open(…) для автоматического закрытия файла.