轉自:https://www.cnblogs.com/herbert/archive/2013/01/07/2848892.html
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)