Контекстный менеджер with

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

В этом модуле мы изучим контекстный менеджер with в Python. Это современный и безопасный способ работы с файлами, который гарантирует правильное закрытие файла даже в случае возникновения ошибок. Вы узнаете, как использовать конструкцию with open(...) as ..., разберетесь с режимами доступа к файлам ('r', 'w', 'a') и научитесь читать и записывать данные, используя лучшие практики программирования. Задания построены от простых определений к написанию и анализу рабочего кода.

Список тем

Режимы открытия файла

id: 40060_task1

При работе с файлами важно правильно выбирать режим доступа. Сопоставьте обозначение режима с его описанием.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Открывает файл только для чтения. Ошибка, если файл не существует.
Открывает файл для записи. Создает новый или перезаписывает существующий.
Открывает файл для дозаписи в конец. Создает файл, если его нет.
Открывает файл и для чтения, и для записи.
'r'
'w'
'a'
'r+'
Сообщения
Проверить
Показать подсказку

Ручное управление vs Context Manager

id: 40060_task2

Распределите характеристики между классическим подходом (try-finally) и использованием контекстного менеджера `with`.

Перетяните элементы в соответствующие блоки
Классический подход (Manual)
Контекстный менеджер (with)
Требует явного вызова .close()
Автоматически закрывает файл
Код более громоздкий и длинный
Гарантирует закрытие даже при ошибках (автоматически)
Синтаксис: with open(...) as f:
Синтаксис: f = open(...); ...; f.close()
Сообщения
Проверить
Показать подсказку

Синтаксис конструкции with

id: 40060_task3

Заполните пропуски, чтобы корректно открыть файл `log.txt` для добавления записей и записать в него строку. Обратите внимание на ключевые слова и методы.

Заполните пропуски
input1S open('log.txt', 'a') input2S log_file:
    log_file.input3S("New entry\n")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте ошибки в блоке with

id: 40060_task4

В данном коде есть две ошибки: одна синтаксическая в объявлении, другая связана с правилами оформления блоков кода в Python. Найдите и исправьте их.

Найдите ошибку и исправьте
with open('data.txt', 'r') as file
content = file.read()
print(content)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

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

id: 40060_task5

Соберите код, который открывает файл `names.txt` для записи и сохраняет туда каждое имя из списка `users` с новой строки. Будьте внимательны: одна строка в наборе лишняя (использует устаревший метод).

Перетяните в правильном порядке строки из одного блока в другой
file.write(name + '\n')
users = ['Alice', 'Bob', 'Charlie']
with open('names.txt', 'w') as file:
    for name in users:
file.close()
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Обработка строк при чтении

id: 40060_task6

Допишите код, который читает файл построчно и удаляет лишние пробельные символы (например, перенос строки) в конце каждой строки перед выводом. Используйте элементы из банка.

Нужно правильно расставить в пропуски предложенные варианты
with open('poem.txt', 'r') as f:
    input1S line in input2S:
        print(line.input3S())
f
strip
for
split
in
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Состояние файла после выхода из блока

id: 40060_task7

Проанализируйте код. Мы открываем файл, читаем его, а затем проверяем атрибут `closed` вне блока `with`. Что выведет последний print?

Выберите правильный вариант ответа
with open('example.txt', 'w') as my_file:
    my_file.write('Test')

print(my_file.closed)
Сообщения
Проверить
Показать подсказку

Копирование содержимого файла

id: 40060_task8

Восстановите логическую последовательность кода для копирования данных из `source.txt` в `backup.txt`. Мы читаем всё содержимое исходного файла и записываем его в целевой.

Расставьте строки в правильном порядке
content = src.read()
with open('source.txt', 'r') as src:
    with open('backup.txt', 'w') as dst:
        dst.write(content)
Сообщения
Проверить
Показать подсказку

Что выведет код?

id: 40060_task9

Определите, что будет выведено на экран после выполнения кода. Код создает файл, записывает в него две строки, а затем читает его содержимое.

Что должно получиться?
with open('test.txt', 'w') as f:
    f.write("Hello")
    f.write("World")

with open('test.txt', 'r') as f:
    print(f.read())
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру