2012-07-06 43 views

回答

1

未經檢驗的,但它可能會是這個樣子與os.walk()

import os 
import shutil 

BASE = '.' 
for root, dirs, files in os.walk(BASE): 
    n = 0 
    head = root 
    while head and head != BASE: 
     head, _ = os.path.split(head) 
     n += 1 
    if n == 3: 
     for dir in dirs: 
      shutil.rmtree(os.path.join(root, dir)) 
     del dirs[:]  # clear dirs so os.walk() doesn't look for subdirectories 
+1

+1。但理論上,分隔符不一定是分隔符,無論它們出現在哪裏。如果Python移植到'/ foo/bar \/baz/qux'包含組件'foo','bar/baz','qux'或其中[foo \ bar]:baz \ qux包含組件'baz的系統'和'qux'在卷'foo \ bar'上,os.path.dirname(和walk,split等)將會工作,但在/ etc上計數/分割。 os.sep不會。 – abarnert 2012-07-07 00:06:38

+0

@abarnert,好點,我編輯了我的答案,現在應該正確處理這種情況。 – 2012-07-08 01:00:22

0

做到這一點,正確的方法是用os.walk,但這裏有一個便宜的答案:

>>> import os 
>>> os.system('rm -rf */*/*/*/*') 
>>> os.system('rmdir */*/*/*') 

這將刪除所有文件至少四個層次中,然後再嘗試刪除紮根至少在三個層次中的所有目錄因爲前面的命令將刪除它們的內容,所以rmdir將成功(並且抱怨它找到的所有非目錄葉子)。

相關問題