У меня есть этот бит одноразового использования, извлеченный из функции, чтобы удалить десятки тысяч каталогов и их содержимого. Это прекрасно, но мне интересно, если я могу использовать «с открытым(), как» на кучу файлов без отступов и отступы и отступы ...Как открыть кучу файлов (с помощью контекстного управления), не вложив кучу отступов
with open(deleted_dirs, 'w') as out_removed:
with open(unsuccessful_targets, 'w') as out_fail:
with open(already_gone, 'w') as out_nowhere:
for target in targets:
try:
shutil.rmtree(target, ignore_errors=False, onerror=on_fail_rmtree)
print(target, file=out_removed)
except FileNotFoundError:
print(target, file=out_nowhere)
except PermissionError:
logger.warning('Permission Error: {}'.format(target))
print(target, file=out_fail)
return
Этот вопрос делает прикосновение к той же тема как python: create a "with" block on several context managers. Эти два должны быть связаны, однако две важные вещи делают этот вопрос разным. 1) В этом вопросе используется канонический пример использования диспетчера контекстов: «с open (f) как fd:« по сравнению с упоминанием объектов «блокировки», которые можно получить из диспетчера контекста (очевидно, то же, но не так очевидно) и что более важно 2) Прилежный поиск не смог поднять предыдущий вопрос или его ответы. (Возможно, это стало более сложным из-за абсолютной вездесущности «с», «как», «контекста» и «менеджера» как плохих поисковых терминов, и что ключевое слово «contextmanager» неопровержимо.)
Возможно, у вас возник вопрос по поводу обзора кода стека? – palsch
Возможный дубликат [python: создать "с блоком для нескольких менеджеров контекста] (http://stackoverflow.com/questions/3024925/python-create-a-with-block-on-several-context-managers) –
Спасибо, что указал на соответствующий вопрос. Хорошее соединение. Я не нашел его в поиске. – mohawkTrail