Несколько итерационных циклов os.walk () не работают - Python3 - PullRequest
0 голосов
/ 18 апреля 2020

Кажется, что os.walk выполняется только один раз, даже если он внутри al oop. Например, вот код, который я тестировал.

for num in range(5):
    count = 0
    for path, dir_names, file_names in os.walk(path):
        count += 1

    print(count)

os.walk, кажется, работает только один раз, а затем игнорирует любую дальнейшую итерацию, потому что вывод, который я получаю:

3
1
1
1
1

Я ожидал увидеть число 3 для каждого из 5 трасс. Почему это не работает?

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Вы переназначаете path на каждую итерацию своего внутреннего l oop, идя по структуре вашего первоначального пути. Когда вы добираетесь до листового узла, вы сохраняете это значение path, а затем go до следующей итерации ваших 5, но начинаете с листового узла.

Дон не связывайтесь с вашими параметрами l oop! Вместо этого сделайте исходный путь независимым от вашей итерации:

start_point = '/'

for num in range(5):
    count = 0
    for path, dir_names, file_names in os.walk(start_point):
        count += 1

    print(count)

Для будущего спокойствия см. Этот прекрасный справочник по справке по отладке . Простое добавление print path в одно или два правильно выбранных места показало бы, что идет не так.

1 голос
/ 18 апреля 2020

Вы переназначаете path в секунду для l oop

...