我的回答非常基本和简单。我自己也是一个初学者,在网上找到了我的答案(尤其是docs.python.org 上的好文档)并尝试了一些测试代码,比如这个:
for root, dirs, files in os.walk(startdir)
print ("__________________")
print (root)
for file in files:
print ("---",file)
这会打印出目录树,其中每个目录(起始目录和包含的子目录)前面都有一行,后面是其中包含的文件。
我认为你必须记住两点:
(1) os.walk 生成一个三元组(一个三元组)<root,dirs,filenames> 其中
(2) for 循环,例如
for root, subdirs, files in os.walk(YourStartDir)
循环通过根目录及其所有子目录。每个文件都不需要一个步骤;它只是扫描目录树,并在每一步(对于树中的每个目录)填充其中包含的文件名列表和直接包含在其中的子目录列表。如果你有n 个目录(包括根目录和它的子目录),for 循环循环n次,即它需要n步。您可以编写一小段测试代码来检查这一点,例如使用计数器。在每一步,它都会生成一个 3 元组:一个字符串加上两个(可能是空的)字符串列表。在本例中,三元组的元素被称为:“root”、“subdirs”、“files”,但这些名称由您决定;如果您的代码是
for a, b, c in os.walk(startdir)
三元组的元素将被称为“a”、“b”、“c”。
让我们回到测试代码:
for root, dirs, files in os.walk(startdir)
print ("__________________")
print (root)
for file in files:
print ("---",file)
第一个循环:root 是您在输入中给出的目录(起始路径,起始目录:一个字符串),dirs 是包含的子目录名称的列表(但不是其中包含的目录的名称),文件是包含文件的列表。在测试代码中,我们没有使用列表“dirs”。
第二个循环:root 现在是第一个子目录,dirs 是其中包含的子目录的列表,files 是其中包含的文件的列表。
...依此类推,直到到达树中的最后一个子目录。
os.walk 有三个可选参数:你可以在网上找到很多关于它们及其使用的信息,但我认为你的问题是关于 os.walk 的基础知识。