1. 程式人生 > >os.walk和os.listdir遍歷目錄比較

os.walk和os.listdir遍歷目錄比較

假設存在下面的目錄和檔案結構:

/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