os.walk和os.listdir遍歷目錄比較
阿新 • • 發佈:2019-01-03
假設存在下面的目錄和檔案結構:
/a ----> /b ----> 1.py,2.py
----> /c ----> 3.py , 4.py
----> 5.py
----> 6.py
os.walk()
執行下面的測試程式碼
import os
for root, dirs, files in os.walk('../a'): # 指向當前的測試資料夾
print(root)
print(dirs)
print(files)
輸出結果,我們解析一下輸出結果
../a # 當前遍歷的根目錄 ['b', 'c'] # 根目錄下的兩個子目錄b,c ['5.py', '6.py'] # 根目錄下的兩個子檔案 ../a\b # 遍歷根目錄下的子目錄b [] # 子目錄b中的子目錄 ['1.py', '2.py'] # 子目錄b中的檔案 ../a\c # 遍歷根目錄下的子目錄c [] # 子目錄c中的子目錄 ['3.py', '4.py'] # 子目錄c中的檔案
os.listdir()
執行如下測試程式碼
for f in os.listdir('../a'):
print(f)
輸出結果
5.py
6.py
b
c
兩種方法比較
os.walk將當前目錄下的所有子目錄及其中的內容,都會遍歷到;而os.listdir只會遍歷當前目錄中所包含的內容。當存在如下的目錄級別時
/a ----> /b ------> b1.txt b2.txt
----> /c ------> c1.txt c2.txt
----> /d ------> d1.txt d2.txt
當我們想要將所有的txt檔案提取出來,此時使用os.walk是最好的選擇,直接將files遍歷即可,因為files在其父目錄成為根目錄時,會將當前資料夾中的所有files遍歷出來,即:
import os
for root, dirs, files in os.walk('./a'):
for file in files:
print(file)
#執行結果
b1.txt
b2.txt
c1.txt
c2.txt