Python 3
os.walk(top, topdown = True, onerror = None, followlinks = False)
文件結構
Test folder:
SubTest1 folder:
ThirdLayer folder:
SubTest2 folder:
示例代碼1:
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步驟里面其他子目錄的文件夾和文件。
示例代碼2:(修改topdown 為False)
import os path = 'D:\Test' for root, dirs, files in os.walk(path, False): print("Root = ", root, "dirs = ", dirs, "files = ", files)
返回結果
Root = D:\Test\SubTest1\ThirdLayer dirs = [] files = ['TEST DOCUMENT L3.docx', 'TEST L3.txt'] Root = D:\Test\SubTest1 dirs = ['ThirdLayer'] files = ['TEST DOCUMENT1.docx', 'TEST1.txt'] Root = D:\Test\SubTest2 dirs = [] files = ['TEST DOCUMENT2.docx', 'TEST2.txt'] Root = D:\Test dirs = ['SubTest1', 'SubTest2'] files = ['TEST DOCUMENT.docx', 'TEST.txt']
結果分析:
其實結果實質是一樣的,不同的是,這次使用的是自下而上的深度遍歷算法。
其他說明:
- 文件的全路徑: 從上面的結果可以看出,文件的全路徑,應該是os.path.join(root, files)
- 如果你要數路徑下有多少個文件夾,其實很簡單就是所有的root數目-1,因為root數目包含path文件夾。
- 如果以文件作為path路徑會怎樣? 返回空。
import os path = 'D:\Test\TEST.txt' for root, dirs, files in os.walk(path, False): print("Root = ", root, "dirs = ", dirs, "files = ", files)
- 如果以一個不存在的文件夾為路徑作為path會怎樣?這里假定如果onerror = None,返回為空。
import os path = 'D:\Test1' for root, dirs, files in os.walk(path, False): print("Root = ", root, "dirs = ", dirs, "files = ", files)