我正在学习python并尝试了os.walk()函数。我在windows平台上使用python 3.4.4(64位)。根据我的理解,python应该逐行执行我的语句。
在这段代码中,我遍历了一个目录。目录结构是
我需要先打印所有文件,然后打印目录名。编写的代码是:
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
我哪里错了?
答案 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。