Более быстрая альтернатива / использование os.walk только для поиска всех подкаталогов в Python - PullRequest
1 голос
/ 04 февраля 2011

Из того, что я читал в Интернете и здесь, на SO, os.walk - одна из лучших ставок для поиска всех подкаталогов и файлов в каталоге, но у меня есть вопрос, если я только хотите рекурсивно найти все подкаталоги , является ли os.walk самым быстрым решением?

Полагаю, кроме того, мой вопрос таков: поскольку вызов os.walk включает for root, dirs, files in os.walk(path), действительно ли os.walk просматривает все файлы, если вы не обязательно вызываете его?

В настоящее время мой код:

for root, dirs, files in os.walk(path):
    for x in dirs:
        DoStuffHere

Но, похоже, он работает медленно в папке с большим количеством подкаталогов и файлов.

Спасибо.

1 Ответ

2 голосов
/ 04 февраля 2011

Я не уверен на 100% во всех аспектах этого, но из моего понимания:

В общем, список файлов уже включен в метаданные каталога, поэтому, когда вы просматриваете каталог, данные ужетам (Linux, не уверен насчет окон).Таким образом, это означает, что os.walk, вероятно, самый быстрый / простой способ сделать это.

Также, опять же, без профилирования, вы знаете, действительно ли os.walk - это замедление?Помните, что общий совет заключается в том, чтобы кодировать ваше приложение / проект, а затем, если он слишком медленный, начать профилирование, чтобы найти медленную часть и повторно их разложить, и т. Д.os.walk примерно за несколько тысяч каталогов + 70 тысяч файлов в течение нескольких секунд, так что это, вероятно, будет достаточно быстро для ваших нужд.

...