Python 3
os.walk(top, topdown = True, onerror = None, followlinks = False)
檔案結構
Test folder:
SubTest1 folder:
ThirdLayer folder:
SubTest2 folder:
範例程式碼1:
import ospath = '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 ospath = '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 ospath = 'D:\Test\TEST.txt' for root, dirs, files in os.walk(path, False): print("Root = ", root, "dirs = ", dirs, "files = ", files)
- 如果以一個不存在的檔案夾為路徑作為path會怎樣?這裡假定如果onerror = None,返回為空白。
import ospath = 'D:\Test1' for root, dirs, files in os.walk(path, False): print("Root = ", root, "dirs = ", dirs, "files = ", files)