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