Python之os.walk和os.path.walk

1、os.walk()python

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

(1)參數top表示須要遍歷的頂級目錄的路徑。spa

(2)參數topdown的默認值是「True」表示首先返回頂級目錄下的文件,而後再遍歷子目錄中的文件。當topdown的值爲"False"時,表示先遍歷子目錄中的文件,而後再返回頂級目錄下的文件。code

(3)參數onerror默認值爲"None",表示忽略文件遍歷時的錯誤。若是不爲空,則提供一個自定義函數提示錯誤信息後繼續遍歷或拋出異常停止遍歷。對象

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

os.walk使用實例:刪除某個文件夾(固然能夠經過os.listdir的遞歸調用刪除)utf-8

#! /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")

2、os.path.walkpdo

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

(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()只產生文件路徑(是子目錄與文件的混合列表)。

相關文章
相關標籤/搜索