學(xué)習(xí)os.walk文件遍歷,最最最重要的是了解這種遍歷方法的邏輯,它的路徑?。〔涣私獾脑?,永遠(yuǎn)也學(xué)不會(huì)。
os.walk()是Python原生的遍歷文件夾方法,但是表現(xiàn)出來的邏輯真的不是很好記憶。
用法:
os.walk(頂級(jí)目錄地址, topdown=True, onerror=None, followlinks=False)
函數(shù)返回一個(gè)三元Tupple: (目錄路徑(字符串), 子目錄名(列表), 文件名(列表))

image
遍歷路徑
os.walk()是逐層掃描的,一層一層來。
比如上圖中,從Root根目錄下開始掃,
- 先掃第一層,獲得
pics1.jpg,pic2.jpg, 然后是一個(gè)目錄New和目錄Old。 - 這個(gè)時(shí)候還不深入每個(gè)子目錄,現(xiàn)在算完成一個(gè)循環(huán),返回一個(gè)子目錄列表:
[pics1.jpg, pics2.jpg, New, Old] - 然后在從上面的第一個(gè)子目錄開始,往下掃,如同上面的過程。
- 完成第一個(gè)目錄后,再繼續(xù)第二個(gè)子目錄。
記住,它不會(huì)無窮盡深入每一個(gè)目錄一直到底,而是逐層掃。
掃完一層后,再跳出來需要遍歷的目錄深入下一層。
指定深度
os.walk默認(rèn)是深入到底的,遍歷所有的位置。有時(shí)候我們只需要一層或兩層。
抱歉,os.walk()沒這個(gè)功能,只能自己寫。
方法就是:聲明一個(gè)depth變量記錄當(dāng)前深度,循環(huán)到一定深度后,用break語句退出循環(huán)。
以下為示例代碼:
depth = 1
for root, subdir, filenames in os.walk():
if depth is 2:
break
depth += 1
示例:只看文件
search_dir = '/home/me/`
for root, subdir, filenames in os.walk(search_dir):
print(root, subdir)
for fn in filenames:
print(fn)