Форум сайта python.su
0
Здравствуйте.
Имею следующую файловую структуру:
Catalog1/
Catalog1/Catalog2
Catalog1/file1.txt
Catalog1/Catalog2/file2.txt
import os for addresses, dirs, files in os.walk('Catalog1/'): for dir in dirs: for file in files: print(address + '/' + dir + '/' + file)
Catalog1/file.txt
Catalog1/file.txt
Catalog1/Catalog2/file2.txt
import os for addresses, dirs, files in os.walk('Catalog1/'): for file in files: print(address + '/' + file)
Отредактировано na9ort (Сен. 28, 2018 09:48:43)
Офлайн
294
na9ortВидите ли, я вам открою один страшный секрет, его знают только избранные программисты и держат в строжайшей тайне. За то что я вам его открою меня могут даже забанить. Так вот программы работают вовсе не так как вы ожидаете, а так как запрограмировал програмист. Только тссс!!!
Я ожидал получить:
na9ortЕстественно. Почему? читаем выше, программа работает так как запрограмировал програмист, а не так как вы этого хотите. А чтобы понять как запрограмировал програмист нужно читать мануалы. https://docs.python.org/3/library/os.html#os.walk
Вроде бы всё логично. Сначала цикл по папкам и вложенный цикл по файлам. Но не работает.
na9ortа он и не завершаеться, он в него переходит, но поскольку после перехода в Catalog1/Catalog2 кортеж dirs пустой, то for dir in dirs: сразу завершается, и не переходит к for file in files: и соотвевенно print тоже не отрабатывает.
Вопрос. Почему в моём случае (самый первый пример) цикл завершается раньше, чем итератор address перейдёт в значение Catalog1/Catalog2?
[code python][/code]
Офлайн
857
na9ortТы бы вывел на экран path, dirs, files , чтобы просто понять, как работает os.walk().
Почему мой вариант не работает? Вроде бы всё логично.
Офлайн
27
os.walk выводит то же самое, что и панель тотал командера (анреал командера, far-а и т.д.), проводник венды или файл-менеджер линукса. Вы же в них не видите что находится во вложенных папках. Видны только имена вложенных папок и файлы, находящиеся в текущей папке.
Для получения содержимого вложенных папок заверни это дело в функцию и используй рекурсивный вызов с полным именем вложенной папки.
Отредактировано Rafik (Сен. 28, 2018 14:30:23)
Офлайн
294
Rafikna9ort не слушайте его, os.walk проходит по всему дереву папок-подпапок.
Для получения содержимого вложенных папок заверни это дело в функцию и используй рекурсивный вызов с полным именем вложенной папки.
[code python][/code]
Офлайн