
Работа с текстовыми файлами в Python строится вокруг встроенной функции open(). Она открывает файл в определённом режиме: «r» для чтения, «w» для записи, «a» для добавления. Наиболее распространённый вариант для анализа содержимого – режим «r», позволяющий считывать данные построчно или целиком.
При чтении больших файлов важно учитывать объём потребляемой памяти. Конструкция for line in file обрабатывает строки по одной и не загружает весь файл сразу, что снижает нагрузку на систему. Для небольших файлов удобно использовать методы read(), readline() и readlines(), выбирая их в зависимости от задачи.
Безопасное управление ресурсами обеспечивается контекстным менеджером with open(…) as f. После завершения блока файл автоматически закрывается, что исключает ошибки, связанные с утечкой ресурсов. Такой подход считается стандартом при работе с файлами в Python и используется в подавляющем большинстве проектов.
Открытие файла с помощью функции open()

Функция open() используется для создания объекта файла, с которым можно работать в Python. Она принимает как минимум один аргумент – путь к файлу. Второй аргумент определяет режим работы.
'r'– чтение (файл должен существовать)'w'– запись (перезаписывает существующий файл или создаёт новый)'a'– добавление данных в конец файла'b'– бинарный режим (добавляется к другим режимам, например'rb')'t'– текстовый режим (по умолчанию)
Пример открытия текстового файла для чтения:
f = open("data.txt", "r", encoding="utf-8")
content = f.read()
f.close()
Рекомендуется использовать контекстный менеджер with, чтобы не забывать закрывать файл:
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()
Если файл большой, вместо read() удобно использовать:
readline()– построчное чтениеreadlines()– список строк- итерацию в цикле
for line in f
Использование параметра encoding необходимо при работе с текстами в разных кодировках, иначе возможны ошибки декодирования.
Чтение содержимого целиком через read()
Метод read() считывает файл полностью и возвращает строку. Использовать его удобно, если размер данных небольшой и умещается в оперативной памяти.
Пример:
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
После вызова read() указатель перемещается в конец файла, поэтому повторное обращение вернёт пустую строку. Чтобы перечитать содержимое, нужно выполнить f.seek(0).
При работе с большими файлами метод может привести к перегрузке памяти. В таких случаях стоит использовать построчное чтение (for line in f) или метод read(size) с ограничением числа символов.
Для двоичных файлов необходимо открывать файл с флагом "rb", иначе возможны искажения содержимого.
Построчное чтение с использованием readline()
Метод readline() возвращает одну строку из файла за раз, включая символ переноса строки. При достижении конца файла возвращается пустая строка "". Такой подход позволяет контролировать чтение и уменьшать использование памяти при работе с большими файлами.
Пример чтения файла по строкам:
with open("data.txt", "r", encoding="utf-8") as f:
while True:
line = f.readline()
if not line:
break
print(line.strip())
Ключевые особенности использования:
| Ситуация | Поведение readline() |
|---|---|
| Строка присутствует | Возвращает строку с символом \n на конце |
| Конец файла | Возвращает пустую строку "" |
| Файл очень большой | Загружается только текущая строка, без чтения всего содержимого |
Для ограничения количества символов можно указать аргумент size:
with open("log.txt", "r", encoding="utf-8") as f:
fragment = f.readline(20) # читается до 20 символов
print(fragment)
Перебор строк файла в цикле for

Пример:
with open("data.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip())
Метод strip() удаляет перевод строки и пробелы по краям, что упрощает обработку содержимого. Если нужно учитывать пустые строки, вызов strip() можно опустить.
При переборе файла через for не следует дополнительно использовать read() или readlines(), иначе строки будут загружены целиком, что лишает цикл преимущества построчного чтения.
Для контроля количества строк можно комбинировать цикл с функцией enumerate():
with open("data.txt", "r", encoding="utf-8") as f:
for i, line in enumerate(f, start=1):
print(f"{i}: {line.strip()}")
Такой подход позволяет отслеживать номер текущей строки и реализовывать фильтрацию по условию.
Применение менеджера контекста with для работы с файлами

Оператор with гарантирует корректное закрытие файла даже при возникновении ошибок. Это избавляет от необходимости вручную вызывать метод close().
Пример чтения содержимого:
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
В этом случае объект f доступен только внутри блока with. После выхода из него файл автоматически закрывается, что исключает утечки ресурсов.
Для построчного чтения удобно использовать цикл:
with open("data.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip())
При работе с большими файлами такой подход экономит память, так как загружается только одна строка за раз.
Менеджер контекста применим и для записи:
with open("output.txt", "w", encoding="utf-8") as f:
f.write("Пример записи")
Использование with обеспечивает предсказуемое поведение и повышает надежность кода при работе с файлами любого размера.
Чтение файла с указанием кодировки

В Python при работе с текстовыми файлами важно явно указывать кодировку, чтобы избежать ошибок декодирования. Для этого в функции open() используется параметр encoding. Например, open('file.txt', 'r', encoding='utf-8') гарантирует корректное чтение UTF-8 текста.
Если файл содержит кириллицу или специфические символы, использование encoding='utf-8-sig' позволит корректно обработать BOM в начале файла. Для файлов в Windows часто применяют encoding='cp1251' или encoding='windows-1251'.
При чтении больших файлов рекомендуется сочетать указание кодировки с построчной обработкой через цикл: with open('file.txt', 'r', encoding='utf-8') as f:. Это снижает нагрузку на память.
for line in f:
process(line)
Ошибки декодирования можно контролировать через параметр errors. Значение 'ignore' пропустит некорректные символы, 'replace' заменит их на �. Например: open('file.txt', 'r', encoding='utf-8', errors='replace').
Рекомендуется всегда явно указывать кодировку при открытии файлов, особенно при переносе кода между различными системами. Это предотвращает скрытые ошибки и обеспечивает предсказуемое поведение чтения текста.
Вопрос-ответ:
Как открыть текстовый файл для чтения в Python?
В Python для открытия текстового файла используют функцию open(). Чтобы открыть файл на чтение, достаточно указать имя файла и режим ‘r’, например: file = open('example.txt', 'r'). После этого можно работать с содержимым файла. После завершения работы файл следует закрыть с помощью file.close() или использовать конструкцию with, которая сама закроет файл.
Какая разница между методами read(), readline() и readlines()?
Метод read() читает весь файл целиком и возвращает строку. readline() считывает только одну строку за раз, а readlines() возвращает список всех строк файла, каждая строка — отдельный элемент списка. Выбор метода зависит от размера файла и того, как вы планируете обрабатывать данные.
Можно ли читать файл построчно в цикле?
Да, файл можно читать построчно с помощью цикла for. Например: with open('example.txt', 'r') as file: for line in file: print(line). Это удобный способ для больших файлов, так как Python не загружает весь файл в память сразу, а обрабатывает строки по мере необходимости.
Что происходит, если файла не существует при попытке его открыть для чтения?
Если указанный файл отсутствует, Python выдаст ошибку FileNotFoundError. Чтобы обработать такую ситуацию, можно использовать блок try…except: try: file = open('example.txt', 'r') except FileNotFoundError: print('Файл не найден'). Это позволяет программе не прерываться и выводить понятное сообщение.
Какие есть способы безопасно закрывать файл после чтения?
Самый простой и надежный способ — использовать контекстный менеджер with. Он автоматически закроет файл после выхода из блока. Пример: with open('example.txt', 'r') as file: data = file.read(). Если использовать open() без with, нужно обязательно вызвать file.close() после работы с файлом, иначе могут возникнуть утечки ресурсов.
