2017-02-18 7 views
0

Я изучаю python и просто опробовал функцию os.walk(). Я использую python 3.4.4 (64-bit) на платформе Windows. По моему мнению python должен выполнять мои инструкции по строкам.Почему python не выполняет мою последовательность запросов на печать

В этом коде я итерированный над структурой каталогов directory.The является

The directory structure is as shown

Мне нужно напечатать все файлы, а затем в каталоге names.The кода, написанном в:

import os 
dir_path = r"D:\\python_os_walk_check" 

for root,dirs,files in os.walk(dir_path): 
    for file_name in files: 
     print(file_name) 
    for dir_name in dirs: 
     print(dir_name) 

вывод печатаемый:

first_folder 
second_folder 
test1.txt 
test2.txt 

По моим данным, выход должен быть:

test1.txt 
test2.txt 
first_folder 
second_folder 

Где я иду не так?

ответ

3

Сначала вы получите содержимое dir_path, которое представляет собой только два каталога. Файлы находятся внутри каталогов, поэтому вы можете получить их позже, во второй и третьей итерации вашего цикла. Добавьте print(root) в первую очередь в цикле, и вы увидите более четко, что происходит.

+0

ОК, я получил it.i предполагал, что список тотальных итерированных файлов был бы возвращен в переменной files.Thanks для вашего ответа. – Omkar

1

Вы можете сохранить имена файлов/каталогов и распечатать их после завершения цикла цикла.

import os 
dir_path = "D:\\python_os_walk_check" 

file_list = [] 
dir_list = [] 

for root,dirs,files in os.walk(dir_path): 
    for file_name in files: 
     file_list.append(file_name) 
    for dir_name in dirs: 
     dir_list.append(dir_name) 

for x in file_list: 
    print(x) 

for i in dir_list: 
    print(i) 
+0

На самом деле печать не была моей конечной целью, я хотел понять, что не так в моем понимании кода выше – Omkar

0

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

import os 
dir_path = r"C:\Python34\Tools\pynche" 

for root,dirs,files in os.walk(dir_path, topdown=False): 
    for file_name in files: 
     print(file_name) 
    for dir_name in dirs: 
     print(dir_name) 

К сожалению, я думаю, что это хорошо только для папок два уровня.

В качестве более современного решения вы можете рассмотреть возможности, предлагаемые в модуле pathlib, Python 3 doc 11.1.

+0

О да, это мог быть другой способ получить тот же вывод для 2-х уровневых папок, как сказано. – Omkar

+0

И, да, я знаю. –