Питон задача тема контекстный менеджер
Написал такой код. Не могу понять как сделать так что бы при открытии несуществующего файла менеджер автоматически создавал и открывал этот файл в режиме записи?
class File():
def __init__(self,filename,mode):
self.filename=filename
self.mode=mode
self.file=None
def __enter__(self):
self.file=open(self.filename)
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
self.file.close()
with File('example.txt','w') as file:
file.write('Всем привет')
Ответы (2 шт):
Автор решения: void
→ Ссылка
Не написал, а скопировал. Если бы ты писал, причем уже с уровнем классов, как в примере, то вопрос у тебя такой не возникал бы. У тебя есть mode, который w, и который потом нигде не используется в коде класса.
Подсказка, где менять:
self.file=open(self.filename)
Описание:
Create a new file if it does not exist:
f = open("myfile.txt", "w")
Автор решения: Bulya
→ Ссылка
class File():
def __init__(self, filename, mode: str):
self.filename = filename
self.mode = mode
self.file = None
def __enter__(self):
if self.mode == 'w':
self.file = open(self.filename, 'w', encoding='utf-8')
elif self.mode == 'a':
self.file = open(self.filename, 'a', encoding='utf-8')
elif self.mode == 'r':
self.file = open(self.filename, 'r', encoding='utf-8')
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
self.file.close()
with File('example.txt', 'r') as file:
# file.write('Всем привет!!')
data = file.read()
print(data)