os.walk(top, topdown=True, οnerrοr=None, followlinks=False)
可以得到一个三元tupple(dirpath, dirnames, filenames),
第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。
dirpath 是一个string,代表目录的路径,
dirnames 是一个list,包含了dirpath下所有子目录的名字。
filenames 是一个list,包含了非目录文件的名字。
这些名字不包含路径信息,如果需要得到全路径,需要使用os.path.join(dirpath, name).
import os
path = 'D:\Test'
for root, dirs, files in os.walk(path):
print("Root = ", root, "dirs = ", dirs, "files = ", files)
文件结构:
输出:
Root = D:\Test dirs = ['SubTest1', 'SubTest2'] files = ['TEST DOCUMENT.docx', 'TEST.txt']
Root = D:\Test\SubTest1 dirs = ['ThirdLayer'] files = ['TEST DOCUMENT1.docx', 'TEST1.txt']
Root = D:\Test\SubTest1\ThirdLayer dirs = [] files = ['TEST DOCUMENT L3.docx', 'TEST L3.txt']
Root = D:\Test\SubTest2 dirs = [] files = ['TEST DOCUMENT2.docx', 'TEST2.txt']
结果分析
1,先从根目录进行遍历,读取跟目录的文件夹和文件。
2,以根目录第一个子目录为新的根目录,读取其文件夹和文件。
3,再以2中的第一个子文件夹为根目录,读取文件夹和文件。(这个应该是属于树结构里面的自上而下深度遍历算法)
4,读取1步骤里面其他子目录的文件夹和文件。
其它说明:
- 文件的全路径: 从上面的结果可以看出,文件的全路径,应该是
os.path.join(root, files)
- 如果你要数路径下有多少个文件夹,其实很简单就是所有的root数目-1,因为root数目包含path文件夹。