2017-02-18 56 views
0

我正在学习python,并试用了os.walk()函数。我在Windows平台上使用python 3.4.4(64位)。根据我的理解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

好吧,我得到了它。我假设一个总迭代文件的列表将被返回文件变量。感谢您的答案。 – Omkar

1

您可以存储文件/目录的名称,并在for循环完成后将其打印出来。

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

而且,我知道。 –

相关问题