os.walk(top, topdown=True, onerror=None, followlinks=False)遍歷目錄,topdown=false表示先返回目錄,后返回文件
參數說明:
top:表示需要遍歷的目錄樹的路徑。
topdown的默認值是True,表示首先返回根目錄樹下的文件,然后遍歷目錄樹下的子目錄。值設為False時,則表示先遍歷目錄樹下的子目錄,返回子目錄下的文件,最后返回根目錄下的文件。
例子:可以看出,topdown設值不同,os.walk()返回的列表元素順序不同(但不是相反),所以遍歷后的結果也不同
topdown=False:
#encoding=utf-8
import os
r=os.walk('d:\\test2',topdown=False)
for i in r:
print i
結果:
D:\>python test.py
('d:\\test2\\dir1', [], [])
('d:\\test2\\dir2\\dir3', [], ['2.txt', '33.bmp'])
('d:\\test2\\dir2', ['dir3'], ['1.txt'])
('d:\\test2', ['dir1', 'dir2'], [])
topdown=True:
import os
r=os.walk('d:\\test2',topdown=True)
for i in r:
print i
結果:
D:\>python test.py
('d:\\test2', ['dir1', 'dir2'], [])
('d:\\test2\\dir1', [], [])
('d:\\test2\\dir2', ['dir3'], ['1.txt'])
('d:\\test2\\dir2\\dir3', [], ['2.txt', '33.bmp'])
onerror的默認值是None,表示忽略文件遍歷時產生的錯誤。如果不為空,則提供一個自定義函數提示錯誤信息后繼續遍歷或拋出異常中止遍歷。
該函數返回一個列表,列表中的每一個元素都是一個元組,該元組有3個元素,分別表示每次遍歷的路徑名,目錄列表和文件列表。
>>> r=os.walk('d:\\test2',topdown=False)
>>> r
<generator object walk at 0x0000000004C5D480>
>>> list(r)
[('d:\\test2\\dir1', [], []), ('d:\\test2\\dir2\\dir3', [], ['2.txt', '33.bmp']), ('d:\\test2\\dir2', ['dir3'], ['1.txt']), ('d:\\test2', ['dir1', 'dir2'], [])]
默認情況下,os.walk 不會遍歷軟鏈接指向的子目錄,若有需要請將followlinks設定為true
用root,dirs,files三個變量遍歷目錄的的目錄層級,目錄層級的子目錄,目錄層級下的文件
for root,dirs,files in os.walk(r'd:\\test2',topdown=False):
root:表示當前遍歷到哪一級目錄了,目錄的名字是誰
dirs:表示root下有哪些子目錄
files:表示root下邊有幾個文件
topdown=False:
代碼:
#encoding=utf-8
import os
r=os.walk('d:\\test2',topdown=False)
for i in r:
print i
print "*"*50
for root,dirs,files in os.walk('d:\\test2',topdown=False):
print "front folder:",root
for name in dirs:
print "folder name:",os.path.join(root,name)
for name in files:
print "file name:",os.path.join(root,name)
結果:

topdown=True:
代碼:
#encoding=utf-8
import os
r=os.walk('d:\\test2',topdown=True)
for i in r:
print i
print "*"*50
for root,dirs,files in os.walk('d:\\test2',topdown=True):
print "front folder:",root
for name in dirs:
print "folder name:",os.path.join(root,name)
for name in files:
print "file name:",os.path.join(root,name)
結果:

