为什么python不遵循我的print语句调用序列

时间:2017-02-18 16:09:41

标签: python os.walk

我正在学习python并尝试了os.walk()函数。我在windows平台上使用python 3.4.4(64位)。根据我的理解,python应该逐行执行我的语句。

在这段代码中,我遍历了一个目录。目录结构是

The directory structure is as shown

我需要先打印所有文件,然后打印目录名。编写的代码是:

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 个答案:

答案 0 :(得分:3)

首先获取dir_path的内容,这只是两个目录。这些文件位于目录中,因此您可以在循环的第二次和第三次迭代中稍后访问它们。在循环中添加print(root)作为第一件事,你会更清楚地看到发生了什么。

答案 1 :(得分: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)

答案 2 :(得分:0)

如果你使用os.walk中的topdown参数,你可能会更像你想要的那样:

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。