【Python】目錄路徑之os.walk & os.path.walk

os.walk()

函數聲明:os.walk(top, topdown = True, onerror = None)

參數說明:

  1. 參數top表示需要遍歷的頂級目錄的路徑;
  2. 參數topdown的默認值是“True”表示首先返回頂級目錄下的文件,然後再遍歷子目錄中的文件;當topdown的值爲”False”時,表示先遍歷子目錄中的文件,然後再返回頂級目錄下的文件;
  3. 參數onerror默認值爲”None”,表示忽略文件遍歷時的錯誤,如果不爲空,則提供一個自定義函數提示錯誤信息後繼續遍歷或拋出異常中止遍歷。

返回值:函數返回一個元組,含有三個元素。這三個元素分別是:每次遍歷的路徑名、路徑下子目錄列表、目錄下文件列表。

os.walk使用實例:
刪除某個文件夾(當然可以通過os.listdir的遞歸調用刪除)

#! /usr/bin/env python
#coding = utf-8
import os

def Remove_dir(top_dir):
    if os.path.exists(top_dir) == False:
        print "not exists"
        return
    if os.path.isdir(top_dir) == False:
        print "not a dir"
        return
    for dir_path, subpaths, files in os.walk(top_dir, False):
        for file in files:
            file_path = os.path.join(dir_path, file)
            print "delete file:%s" % file_path
            os.remove(file_path)
        print "delete dir:%s" % dir_path
        os.rmdir(dir_path)

#調用
Remove_dir(r"C:\Users\Administrator\Desktop\zrbuN7zRuc")

os.path.walk()

函數聲明:os.path.walk(top,func,arg)

參數說明:

  1. 參數top表示需要遍歷的目錄路徑;
  2. 參數func表示回調函數,即對遍歷路徑進行處理的函數
    所謂回調函數,是作爲某個函數的參數使用,當某個時間觸發時,程序將調用定義好的回調函數處理某個任務
    ##注意:walk的回調函數必須提供三個參數:第1個參數爲os.path.walk的參數arg,第2個參數表示目錄dirname,第3個參數表示文件列表names
    ##注意:os.path.walk的回調函數中的文件列表不和os.walk()那樣將子目錄和文件分開,而是混爲了一攤,需要在回調函數中判斷是文件還是子目錄;
  3. 參數arg是傳遞給回調函數的元組,爲回調函數提供處理參數,arg可以爲空。回調函數的第1個參數就是用來接收這個傳入的元組的。

過程說明:
以top 爲根的目錄樹中的每一個目錄 (包含 top 自身,如果它是一個目錄),以參數 (arg, dirname, names)調用回調函數 funct。參數 dirname 指定訪問的目錄,參數 names 列出在目錄中的文件(從 os.listdir(dirname)中得到)。回調函數可以修改 names 改變 dirname 下面訪問的目錄的設置,例如,避免訪問樹的某一部分。(由 names 關連的對象必須在合適的位置被修改,使用 del 或 slice 指派。) 注意:符號連接到目錄不被作爲一個子目錄處理,並且因此 walk()將不訪問它們。訪問連接的目錄你必須以os.path.islink(file) 和 os.path.isdir(file)標識它們,並且必須調用walk() 。

os.path.walk使用實例:
遍歷文件夾下所有文件(os.path.walk()不能用於刪除文件夾(可能是我沒想到),因爲os.path.walk()先遍歷頂級目錄,再遍歷子目錄中的文件)

#! /usr/bin/env python
#coding = utf-8
import os
#回調函數
def find_file(arg, dirname, files):
    for file in files:
        file_path = os.path.join(dirname, file)
        if os.path.isfile(file_path):
            print "find file:%s" % file_path

#調用
os.path.walk(r"C:\Users\Administrator\Desktop\4", find_file, ())

區別

os.path.walk()與os.walk()產生的文件名列表並不相同:
os.walk()產生目錄樹下的目錄路徑和文件路徑,而os.path.walk()只產生文件路徑(是子目錄與文件的混合列表)

發佈了30 篇原創文章 · 獲贊 30 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章