Чтение и запись текстовых файлов
Чтение и запись текстовых файлов в Python: методы read(), readline(), readlines(), write(), writelines().
Файловый объект предоставляет несколько методов чтения. Выбор зависит от размера файла и от того, нужны ли все строки сразу или только по одной.
Методы чтения
Метод | Возвращает | Когда использовать |
| всю строку целиком | небольшие файлы |
| одну строку | пошаговая обработка |
| список всех строк | нужен доступ по индексу |
read() — весь файл сразу
with open("poem.txt", "w", encoding="utf-8") as f:
f.write("Строка первая\nСтрока вторая\nСтрока третья\n")
with open("poem.txt", "r", encoding="utf-8") as f:
text = f.read()
print(text)
print("Символов:", len(text))
Вывод:
Строка первая Строка вторая Строка третья Символов: 44
readlines() — список строк
with open("poem.txt", "r", encoding="utf-8") as f:
lines = f.readlines() # ['Строка первая\n', 'Строка вторая\n', ...]
for i, line in enumerate(lines, 1):
print(f"{i}: {line.strip()}")
Вывод:
1: Строка первая 2: Строка вторая 3: Строка третья
Метод
strip()убирает символ новой строки\nпо краям — без него в выводе появились бы лишние пустые строки.
Перебор файла как итерируемого объекта
Самый эффективный способ читать построчно — итерировать файловый объект напрямую. Python не загружает весь файл в память:
with open("poem.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip())
Вывод:
Строка первая Строка вторая Строка третья
write() и writelines()
lines = ["Яблоко\n", "Банан\n", "Вишня\n"]
with open("fruits.txt", "w", encoding="utf-8") as f:
f.writelines(lines) # записывает список без join
with open("fruits.txt", "r", encoding="utf-8") as f:
print(f.read())
Вывод:
Яблоко Банан Вишня
write()принимает строку;writelines()— список строк. Ни тот ни другой не добавляют перевод строки автоматически — включайте\nсами.
Коротко
read()— весь файл одной строкой;readlines()— список строк; итерация по файлу — построчно без загрузки в память.- Убирайте
\nметодомstrip()при обработке строк. write(s)пишет строку;writelines(list)— список строк (без авто-\n).- Для больших файлов итерируйте файловый объект напрямую — это экономит память.
Проверьте себя
1. Какой метод возвращает всё содержимое файла одной строкой?
Areadlines()
Breadline()
Cread()
Dreadall()
2. Зачем вызывать strip() при построчном чтении файла?
AЧтобы убрать пробелы и символ \n в конце строки
BЧтобы разбить строку на слова
CЧтобы перевести строку в нижний регистр
Dstrip() не нужен при работе с файлами
3. Что добавляет writelines() между элементами списка при записи?
AЗапятую
BПробел
CПеренос строки
DНичего не добавляет