ПочатиПочніть безкоштовно

Контекстний менеджер 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())
Редагувати та запускати код