Контекстний менеджер 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())