НачатьНачать бесплатно

Контекстный менеджер open() только для чтения

У вас есть набор файлов с данными для следующего проекта по глубокому обучению — вы потратили месяцы на их сбор и подготовку. Было бы очень неприятно случайно перезаписать один из них при попытке загрузить для обучения. Поэтому вы решаете создать версию контекстного менеджера open() только для чтения и использовать её в своём проекте.

Обычный контекстный менеджер open():

  • принимает имя файла и режим ('r' — чтение, 'w' — запись, 'a' — добавление)
  • открывает файл для чтения, записи или добавления
  • передаёт управление контексту вместе со ссылкой на файл
  • ожидает завершения контекстного блока
  • затем закрывает файл перед выходом

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

Это упражнение является частью курса

Написание функций на Python

Посмотреть курс

Инструкции к упражнению

  • Передайте управление из open_read_only() в контекстный блок так, чтобы объект read_only_file был присвоен переменной my_file.
  • Используйте метод .close() объекта read_only_file, чтобы не оставлять открытые файлы незакрытыми.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

@contextlib.contextmanager
def open_read_only(filename):
  """Open a file in read-only mode.

  Args:
    filename (str): The location of the file to read

  Yields:
    file object
  """
  read_only_file = open(filename, mode='r')
  # Yield read_only_file so it can be assigned to my_file
  ____ ____
  # Close read_only_file
  ____.____()

with open_read_only('my_file.txt') as my_file:
  print(my_file.read())
Редактировать и запускать код