Чтение и запись текстовых файлов

Чтение и запись текстовых файлов в Python: методы read(), readline(), readlines(), write(), writelines().

Файловый объект предоставляет несколько методов чтения. Выбор зависит от размера файла и от того, нужны ли все строки сразу или только по одной.

Методы чтения

Метод

Возвращает

Когда использовать

read()

всю строку целиком

небольшие файлы

readline()

одну строку

пошаговая обработка

readlines()

список всех строк

нужен доступ по индексу

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Ничего не добавляет
Поддержать проект