为什么 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.
我正在学习 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.