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

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

Работа с файлами — одна из основных задач программирования. Python предоставляет мощные инструменты для обработки текстовых и бинарных файлов.


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

Открытие файла #

Функция open() используется для открытия файла. Она принимает два основных аргумента:

  1. Имя файла.
  2. Режим работы:
    • 'r' — чтение (по умолчанию).
    • 'w' — запись (перезаписывает файл).
    • 'a' — добавление в конец файла.
    • 'r+' — чтение и запись.

Чтение файла #

# Пример файла: example.txt
# Содержимое: "Hello, world!"

with open("example.txt", "r") as file:
    content = file.read()
    print(content)  # Hello, world!

Чтение строк по одной:

with open("example.txt", "r") as file:
    for line in file:
        print(line.strip())  # Удаляем символ перевода строки

Запись в файл #

with open("output.txt", "w") as file:
    file.write("This is a new file.\n")
    file.write("Adding another line.")

Добавление в файл:

with open("output.txt", "a") as file:
    file.write("\nAppending this line.")

8.2. Работа с бинарными файлами #

Бинарные файлы хранят данные в необработанном виде (например, изображения, звуки). Для работы с ними используются режимы 'rb' (чтение) и 'wb' (запись).

Чтение бинарного файла #

with open("image.jpg", "rb") as file:
    data = file.read()
    print(len(data))  # Количество байтов в файле

Запись бинарного файла #

with open("copy.jpg", "wb") as file:
    file.write(data)  # Записываем содержимое из переменной data

Чтение частями #

Для больших файлов можно читать данные порциями:

with open("large_file.bin", "rb") as file:
    while chunk := file.read(1024):  # Читаем по 1024 байта
        print(f"Прочитано {len(chunk)} байт")

8.3. Использование менеджеров контекста #

Менеджеры контекста (ключевое слово with) обеспечивают безопасное открытие и закрытие файла, даже если в процессе работы возникнет ошибка.

Преимущество использования with #

Без менеджера контекста:

file = open("example.txt", "r")
try:
    content = file.read()
finally:
    file.close()  # Закрытие файла вручную

С менеджером контекста:

with open("example.txt", "r") as file:
    content = file.read()
# Файл закрывается автоматически при выходе из блока with

Вложенные менеджеры контекста #

Можно работать с несколькими файлами одновременно:

with open("input.txt", "r") as infile, open("output.txt", "w") as outfile:
    for line in infile:
        outfile.write(line.upper())  # Копируем текст в верхнем регистре

Пример комплексной работы с файлами #

Чтение, обработка и запись данных #

# Чтение данных
with open("data.txt", "r") as infile:
    lines = infile.readlines()

# Обработка данных
processed_lines = [line.strip().upper() for line in lines]

# Запись обработанных данных
with open("processed_data.txt", "w") as outfile:
    outfile.write("\n".join(processed_lines))

Генерация файлов отчетов #

data = {"Alice": 95, "Bob": 87, "Charlie": 78}

# Запись отчета в файл
with open("report.txt", "w") as file:
    for name, score in data.items():
        file.write(f"{name}: {score}\n")

Рекомендации при работе с файлами #

  1. Используйте менеджеры контекста для безопасного открытия и закрытия файлов.
  2. Для больших файлов читайте данные частями, чтобы экономить память.
  3. Всегда указывайте режим ('r', 'w', 'rb', и т. д.), чтобы избежать непредвиденного поведения.
  4. Проверяйте наличие файла перед его открытием с помощью модуля os или pathlib.

Работа с файлами в Python — мощный инструмент, который позволяет легко обрабатывать текстовые и бинарные данные.