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文件夾。