Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Рекурсивный обход каталогов


Автор: Arkadiy 6.1.2009, 13:56
Структура каталога:
Код

1d [DIR]
  2d [DIR]
    3f [FILE]
  2f  [FILE]



такой код:

Код

def walk_near(path):
    for root, dirs, files in os.walk(path):
        print "ROOT:", root
        print "DIRS:", dirs
        print "FILES:", files
        try:
            for dir in dirs:
                new_path = os.path.join(root, dir)
                print "ENTER in:" + new_path
                walk_near(new_path)
            for file in files:
                file_path = os.path.join(root, file)
                print "WORK WITH: " + file_path
        except:
            print "exception"


и такой output:
Код

ROOT: c:\etc\tst\
DIRS: ['1d']
FILES: []
ENTER in:c:\etc\tst\1d
ROOT: c:\etc\tst\1d
DIRS: ['2d']
FILES: ['2f.htm']
ENTER in:c:\etc\tst\1d\2d
ROOT: c:\etc\tst\1d\2d
DIRS: []
FILES: ['3f.htm']
WORK WITH: c:\etc\tst\1d\2d\3f.htm
WORK WITH: c:\etc\tst\1d\2f.htm
<================== Вот тут должно все закончиться, но продолжает работать, почему?
ROOT: c:\etc\tst\1d\2d
DIRS: []
FILES: ['3f.htm']
WORK WITH: c:\etc\tst\1d\2d\3f.htm
ROOT: c:\etc\tst\1d
DIRS: ['2d']
FILES: ['2f.htm']
ENTER in:c:\etc\tst\1d\2d
ROOT: c:\etc\tst\1d\2d
DIRS: []
FILES: ['3f.htm']
WORK WITH: c:\etc\tst\1d\2d\3f.htm
WORK WITH: c:\etc\tst\1d\2f.htm
ROOT: c:\etc\tst\1d\2d
DIRS: []
FILES: ['3f.htm']
WORK WITH: c:\etc\tst\1d\2d\3f.htm


В чем я ошибся?

Автор: Daevaorn 6.1.2009, 15:25
А зачем вы рекурсивно вызываете туже функцию? walk и так пройдет по всем подкаталогам.

Автор: Arkadiy 6.1.2009, 16:02
Daevaorn,  действительно smile спасибо за помощь! ;-)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)