为什么 python 不遵循我的打印语句调用顺序

Why python is not following my sequence of print statement calls

我正在学习 python 并且刚刚试用了 os.walk() function.I 我在 [=37= 上使用 python 3.4.4(64 位) ] platform.According 据我了解 python 应该逐行执行我的语句。

在这段代码中,我迭代了一个 directory.The 目录结构是

我需要先打印所有文件,然后打印目录 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

我哪里错了?

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

您可以存储 files/directories 的名称并在 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)

如果您在 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)

不幸的是,我认为这只适用于 two-level 个文件夹。

作为更 up-to-date 的解决方案,您可以考虑 pathlib 模块中提供的功能,Python 3 doc 11.1.