Что такое Python "RAII" идиома для переменного количества ресурсов? - PullRequest
2 голосов
/ 28 января 2012

Каков «лучший» способ открыть переменное количество файлов в python?

Я не могу понять, как использовать «с», если количество файлов не известно заранее.

(Входящий из RAII / C ++)

Ответы [ 2 ]

4 голосов
/ 28 января 2012

Что ж, вы могли бы определить свой собственный менеджер контекста, который взял список пар (filename, mode) и возвратил список открытых файловых дескрипторов (а затем закрыл все эти дескрипторы при выходе из контекстного менеджера).http://docs.python.org/reference/datamodel.html#context-managers и http://docs.python.org/library/contextlib.html для более подробной информации о том, как определить свои собственные менеджеры контекста.

0 голосов
/ 04 февраля 2015

С 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 пользователям не повезло.Еще одна причина для обновления.

...