Чтение текстового файла
Уроки курсаЧтение текстового файла
Чтение содержимого файла методами read() и readlines()
Когда файл открыт через with open(...) as f, дескриптор f предоставляет два основных метода для извлечения текста: read() и readlines(). Они решают одну задачу — достать содержимое файла — но возвращают разные типы данных.
Метод read()
read() читает файл целиком и возвращает всё содержимое как одну строку str.
with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
print(type(content)) # <class 'str'>
Если файл data.txt содержит три строки:
яблоко банан вишня
то переменная content после read() будет выглядеть так:
'яблоко\nбанан\nвишня\n'
Это одна строка, в которой символы \n отмечают границы строк файла. Такой результат удобен, когда нужно работать с текстом целиком — например, искать подстроку или передать весь текст куда-то дальше одним куском.
Одна особенность: после вызова read() позиция чтения смещается в конец файла. Если вызвать read() ещё раз на том же дескрипторе, вернётся пустая строка — читать уже нечего. Это не ошибка, просто нужно учитывать.
Метод readlines()
readlines() тоже читает файл целиком, но не склеивает его в одну строку, а возвращает список строк — list[str]. Каждый элемент списка соответствует одной строке файла.
with open('data.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
print(lines)
print(type(lines)) # <class 'list'>
Результат для того же файла:
['яблоко\n', 'банан\n', 'вишня\n']
Каждый элемент включает завершающий \n — кроме последней строки, если файл не заканчивается переносом. Список удобен тогда, когда нужно работать со строками по отдельности: обращаться к конкретной по индексу, считать их количество через len(lines), фильтровать.
Когда что использовать
Выбор между read() и readlines() зависит от того, как именно вы собираетесь обрабатывать данные.
read()— если нужна одна строка: поиск подстроки, разбивка вручную, передача текста целиком.readlines()— если сразу нужен список: индексный доступ, проверка числа строк, работа с отдельными элементами.
Оба метода загружают весь файл в память сразу. Для небольших файлов это нормально. Если файл большой — на это стоит обратить внимание, но для большинства задач начального уровня это не проблема.
