07. Работа с файлами

Почему важно уметь работать с файлами

Файлы — это способ хранить данные между запусками программы. Например, вы можете сохранять результаты игры, записи пользователей, текстовые заметки или статистику.
Представь, что твоя программа — это дневник. Чтобы не потерять записи, ты сохраняешь их в файл.

В Python для работы с файлами есть встроенные функции open(), read(), write() и конструкция with.

Открытие и чтение файла


file = open('data.txt', 'r', encoding='utf-8')
content = file.read()
print(content)
file.close()

Что происходит

  • Открываем файл data.txt в режиме чтения ('r').
  • Считываем содержимое функцией read().
  • Закрываем файл, чтобы освободить ресурсы (close()).

Лучший способ — with open()

В Python есть удобный способ автоматически закрывать файл:

with open('data.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)

Преимущество — файл закрывается автоматически, даже если произойдёт ошибка.

Запись в файл

Чтобы записать данные, используем режим 'w' (write):

with open('data.txt', 'w', encoding='utf-8') as f:
    f.write('Привет, файл!')

Если файл уже существует, его содержимое будет перезаписано.

Добавление текста (режим 'a')


with open('data.txt', 'a', encoding='utf-8') as f:
    f.write('\nНовая строка')

Теперь в файле:


Привет, файл!
Новая строка

Чтение построчно


with open('data.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print('Строка:', line.strip())

Метод strip() убирает лишние пробелы и символы перевода строки.

Запись списка строк


lines = ['Пункт 1', 'Пункт 2', 'Пункт 3']
with open('list.txt', 'w', encoding='utf-8') as f:
    for line in lines:
        f.write(line + '\n')

Проверка существования файла


import os
if os.path.exists('data.txt'):
    print('Файл найден!')
else:
    print('Файл не найден!')

Обработка ошибок при работе с файлами

Иногда файл может не существовать, или у программы нет прав на запись. Чтобы избежать ошибок, используем try/except:

try:
    with open('config.txt', 'r', encoding='utf-8') as f:
        print(f.read())
except FileNotFoundError:
    print('Файл не найден!')

Полезные режимы открытия файла

  • 'r' — чтение (по умолчанию)
  • 'w' — запись (перезаписывает файл)
  • 'a' — добавление (append)
  • 'x' — создать новый файл (ошибка, если уже существует)
  • 'b' — двоичный режим (binary, для изображений и т.п.)

Работа с файлами CSV

CSV — это таблица, где значения разделены запятыми. Python имеет модуль csv для чтения и записи таких файлов.

import csv

# Запись данных with open('users.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['Имя', 'Возраст']) writer.writerow(['Анна', 25]) writer.writerow(['Иван', 30])

# Чтение данных with open('users.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: print(row)

Работа с JSON-файлами


import json

user = {'name': 'Анна', 'age': 25}

# Запись JSON with open('user.json', 'w', encoding='utf-8') as f: json.dump(user, f, ensure_ascii=False, indent=2)

# Чтение JSON with open('user.json', 'r', encoding='utf-8') as f: data = json.load(f) print(data['name'])

Практические задачи

  • Создай программу, которая записывает введённый пользователем текст в файл.
  • Сделай программу, которая считает количество строк в файле.
  • Сохрани словарь Python в JSON-файл и затем прочитай его обратно.

Типичные ошибки новичков

  • Забывают закрыть файл (поэтому лучше использовать with open()).
  • Перезаписывают файл вместо добавления (используют 'w' вместо 'a').
  • Не указывают кодировку (encoding='utf-8') при работе с русским текстом.

Мини-проект: дневник заметок


while True:
    note = input('Введите заметку (или пустую строку для выхода): ')
    if not note:
        break
    with open('notes.txt', 'a', encoding='utf-8') as f:
        f.write(note + '\n')
print('Все заметки сохранены!')

Итоги урока

Теперь вы знаете:
  • Как открывать, читать и записывать файлы в Python.
  • Как использовать with open() для безопасной работы.
  • Как обрабатывать ошибки при работе с файлами.
  • Как работать с CSV и JSON-файлами.