天天看點

Os.walk用法小結

  1. 定義:
假設你希望對某個檔案夾中的所有檔案改名,包括檔案夾中所有子檔案夾中的所有檔案。也就說你需要周遊目錄樹,處理每個檔案。Python正好提供了這樣的函數
  1. 用法
代碼如下:

import os

for folder, subfolders,filenamesin os.walk(r'C:\Users\eilmoro\Desktop\test'):

    print('The folder is%s'%folder)

    for foldername insubfolders:

        print('The subfoldersis %s'%foldername)

    for file in filenames:

        print('The files is%s'%file)

輸出結果:

The folder is C:\Users\eilmoro\Desktop\test

The subfolders is st01

The files is stx01.txt

The files is stx02.txt

The folder is C:\Users\eilmoro\Desktop\test\st01

The subfolders is sst01

The files is sstx01.txt

The files is sstx02.txt

The folder is C:\Users\eilmoro\Desktop\test\st01\sst01

The files is ssstx01.txt

The files is ssstx02.txt

Os.walk用法小結
  1. 注意點
    1. 第一個for循環是周遊這個test檔案夾及它下面的每一個子檔案夾,檔案及子檔案夾下的子檔案夾和檔案直到目錄的最後一層
    2. 第一個for後面的三個變量名不用固定形式,取有意義的三個變量名就可以,如:mainfolder, folders, files也是可以的,不影響程式的運作
    3. 輸出的結果:除了第一個變量是完整的絕對路徑,第二個隻是子檔案夾名的清單,第三個隻是檔案名的清單
    4. 傳入walk後的路徑要注意轉義字元的問題,若傳入的路徑是'C:\Users\eilmoro\Desktop\test',沒有r,程式運作是會報錯:
      1.  Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun錯誤解決方案
      2.  可以寫成如下幾種形式:
        1. 'C:/Users/eilmoro/Desktop/test'
        2. r'C:\Users\eilmoro\Desktop\test'
        3. 'C:\\Users\\eilmoro\\Desktop\\test'
我強烈推薦第1種寫法,這在Linux和window下都是行的通的