一、os.walk()
函數聲明:os.walk(top,topdown=True,onerror=None)
(1)參數top表示需要遍歷的頂級目錄的路徑。
(2)參數topdown的默認值是“True”表示首先返回頂級目錄下的文件,然后再遍歷子目錄中的文件。當topdown的值為"False"時,表示先遍歷子目錄中的文件,然后再返回頂級目錄下的文件。
(3)參數onerror默認值為"None",表示忽略文件遍歷時的錯誤。如果不為空,則提供一個自定義函數提示錯誤信息后繼續遍歷或拋出異常中止遍歷。
返回值:函數返回一個元組,含有三個元素。這三個元素分別是:每次遍歷的路徑名、路徑下子目錄列表、目錄下文件列表。
os.walk使用實例:刪除某個文件夾(當然可以通過os.listdir的遞歸調用刪除)
05 |
def Remove_dir(top_dir): |
06 |
if os.path.exists(top_dir) = = False : |
09 |
if os.path.isdir(top_dir) = = False : |
12 |
for dir_path,subpaths,files in os.walk(top_dir, False ): |
14 |
file_path = os.path.join(dir_path, file ) |
15 |
print "delete file:%s" % file_path |
17 |
print "delete dir:%s" % dir_path |
21 |
Remove_dir(r "C:\Users\Administrator\Desktop\zrbuN7zRuc" ) |
獲取文件夾大小:
1 import os
2 2 from os.path import join, getsize
3 3
4 4 def getdirsize(dir):
5 5 size = 0L
6 6 for root, dirs, files in os.walk(dir):
7 7 for file in files:
8 8 size += getsize(os.path.join(root, file))
9 9 print os.path.join(root,file)
10 10 return size
11 11 if __name__ == '__main__':
12 12 print 'sssssssssssssssssssssssssss'
13 13 filesize = getdirsize('/home/zhang/swift/swift')
14 14 print 'Ther are %.3f' % (filesize/1024/1024), 'Mbytes in ./swift'
二、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()先遍歷頂級目錄,再遍歷子目錄中的文件)。
05 |
def find_file(arg,dirname,files): |
07 |
file_path = os.path.join(dirname, file ) |
08 |
if os.path.isfile(file_path): |
09 |
print "find file:%s" % file_path |
13 |
os.path.walk(r "C:\Users\Administrator\Desktop\4" ,find_file,()) |
區別:os.path.walk()與os.walk()產生的文件名列表並不相同.os.walk()產生目錄樹下的目錄路徑和文件路徑,而os.path.walk()只產生文件路徑(是子目錄與文件的混合列表)。