Чтение и запись текстовых файлов - Python с нуля до Junior: Путь к первой работе в IT - Qpel.AI

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

В реальных проектах данные редко хранят только в оперативной памяти. Представьте: вы написали программу, которая собирает важную информацию, но стоит её закрыть — и всё исчезает. Чтобы этого не произошло, данные нужно сохранять на диск. Или, наоборот, считывать уже сохранённые. Для этого и нужна работа с файлами.

Открываем и закрываем файлы

Для работы с файлами в Python используем встроенную функцию open(). Она возвращает специальный файловый объект, который умеет читать и записывать.

Синтаксис open():

open(file, mode='r', encoding=None)
  • file: путь к файлу. Например, "my_data.txt".
  • mode: режим открытия файла. Это очень важный параметр:
    • 'r' (read): читать файл (режим по умолчанию). Файла нет? Будет ошибка.
    • 'w' (write): записать в файл. Файла нет? Он создастся. Файл есть? Его содержимое перезапишется. Будьте осторожны!
    • 'a' (append): дозаписать в файл. Файла нет? Он создастся. Файл есть? Новые данные добавятся в конец.
    • 'x' (exclusive creation): создать файл. Файл уже есть? Будет ошибка.
    • 'b' (binary): бинарный режим (для изображений, аудио). Используется вместе с r, w, a (например, 'rb', 'wb').
    • 't' (text): текстовый режим (по умолчанию). Используется вместе с r, w, a (например, 'rt', 'wt').
  • encoding: кодировка файла. Например, 'utf-8'. В России часто используют 'utf-8' или 'cp1251' для старых файлов. Всегда указывайте 'utf-8' — это хорошая практика.

После работы файл нужно обязательно закрыть методом close(). Это освобождает системные ресурсы и гарантирует, что все изменения сохранятся.

# Открываем файл для чтения
file_read = open("my_text.txt", "r", encoding="utf-8")
# ... работаем с файлом ...
file_read.close() # Закрываем!

# Открываем файл для записи (перезапишет или создаст новый)
file_write = open("new_text.txt", "w", encoding="utf-8")
# ... работаем с файлом ...
file_write.close() # Закрываем!

Важно: Забыть закрыть файл — частая ошибка новичков. Это может привести к потере данных, повреждению файлов или блокировке доступа к ним для других программ.

Читаем данные из файла

Открыли файл в режиме чтения ('r')? Теперь можно получить его содержимое:

  • read(): считывает весь файл целиком в одну строку.
  • readline(): считывает одну строку из файла.
  • readlines(): считывает все строки файла и возвращает их списком.
# Создадим файл для примера
with open("example.txt", "w", encoding="utf-8") as f:
    f.write("Привет, мир!\n")
    f.write("Это вторая строка.\n")
    f.write("И это третья.")

# Читаем весь файл
with open("example.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print("Содержимое файла (read()):")
    print(content)

# Читаем файл построчно
with open("example.txt", "r", encoding="utf-8") as f:
    print("\nСодержимое файла (readline()):")
    line1 = f.readline()
    line2 = f.readline()
    print(f"Первая строка: {line1.strip()}") # .strip() убирает перенос строки
    print(f"Вторая строка: {line2.strip()}")

# Читаем все строки в список
with open("example.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    print("\nСодержимое файла (readlines()):")
    for line in lines:
        print(line.strip())

Записываем данные в файл

Для записи в файл, открытый в режиме записи ('w') или дозаписи ('a'), используем:

  • write(string): записывает строку в файл. Важно: write() не добавляет символ новой строки (\n) автоматически. Добавляйте его вручную, если нужно.
  • writelines(list_of_strings): записывает список строк в файл. Каждая строка из списка записывается последовательно, без разделителей.
# Записываем в новый файл (или перезаписываем существующий)
with open("output.txt", "w", encoding="utf-8") as f:
    f.write("Это первая строка.\n")
    f.write("Это вторая строка.\n")
    f.write("И это последняя строка.")

# Дозаписываем в файл
with open("output.txt", "a", encoding="utf-8") as f:
    f.write("\nДобавим новую строку в конец.")

# Записываем список строк
data_list = ["Яблоко\n", "Банан\n", "Апельсин\n"]
with open("fruits.txt", "w", encoding="utf-8") as f:
    f.writelines(data_list)

print("\nПроверьте файлы 'output.txt' и 'fruits.txt' в вашей директории!")

Практическое задание 🚀

  1. Создайте файл my_diary.txt. Запишите в него несколько строк о вашем дне, используя режим записи ('w').
  2. Откройте этот же файл в режиме дозаписи ('a') и добавьте ещё одну запись о планах на завтра.
  3. Прочитайте весь файл my_diary.txt целиком и выведите его содержимое в консоль.

Работа с файлами — это базовая, но очень важная часть программирования. Вы могли заметить, что ручное открытие и закрытие файлов может быть неудобным и чревато ошибками. К счастью, в Python есть более элегантное и безопасное решение, о котором мы поговорим на следующей странице. 😉