Чтобы сделать это с помощью декоратора, вы можете ввести ContextManager любого типа файла в логи чтения, записи (или любой другой необходимой вам обработки) c, что-то вроде этого:
def reader(func):
def wrap(*args, **kwargs):
with func(*args, **kwargs) as f:
for text in f:
text_line = text.strip().split(" ")
...
return wrap
@reader
def file_reader(*args, **kwargs):
return open(*args, **kwargs)
@reader
def zipfile_reader(z, *args, **kwargs):
return z.open(*args, **kwargs)
file_content = file_reader(<path>, <mode>)
zipfile_content = zipfile_reader(zipfile_obj, <filename>, <extra_args>)
Но Я рекомендую просто извлечь общий лог c из read_tower
в отдельную функцию:
def read_file_content(file):
for text in f:
text_line = text.strip().split(" ")
...
использование файла:
with open('..path', mode) as f:
read_file_content(f)
использование zipfile:
with zipfile.ZipFile(Path(zip_filename)) as z:
for filename in z.namelist():
if re.search(r'.*\.mlm',filename):
with z.open(filename,mode="r") as f:
read_file_content(f)
Примечание : код здесь только для того, чтобы дать представление, это не полностью рабочий код.