Каков «лучший» способ открыть переменное количество файлов в python?
Я не могу понять, как использовать «с», если количество файлов заранее неизвестно.
(Входящие от RAII/C++)
Каков «лучший» способ открыть переменное количество файлов в python?
Я не могу понять, как использовать «с», если количество файлов заранее неизвестно.
(Входящие от RAII/C++)
Что ж, вы можете определить свой собственный диспетчер контекста, который берет список пар (filename, mode)
и возвращает список дескрипторов открытых файлов (а затем закрывает все эти дескрипторы при выходе из диспетчера контекста).
См. http://docs.python.org/reference/datamodel.html#context-managers и http://docs.python.org/library/contextlib.html для более подробной информации о том, как определить ваши собственные менеджеры контекста.
В версии 3.3 для таких ситуаций теперь доступен contextlib.ExitStack
. Вот пример кода из документации contextlib
:
with ExitStack() as stack:
files = [stack.enter_context(open(fname)) for fname in filenames]
# All opened files will automatically be closed at the end of
# the with statement, even if attempts to open files later
# in the list raise an exception
2.7 пользователям не повезло. Еще одна причина обновиться.