2012-06-03 49 views
25

我已閱讀關於此功能的文檔,但是,我不認爲我正確理解這一點,如果有人可以告訴我什麼是我的想法錯誤,或者如果我是正確的,那將是一個很大的幫助。這裏是我的理解:shutil.rmtree()澄清

使用shutil.rmtree(path)函數,它只會刪除指定的目錄,而不是整個路徑。 IE:

shutil.rmtree('user/tester/noob')

使用此,它只會刪除 '小白' 目錄是否正確?不是完整的路徑?

+0

你是指「不是完整的路徑」是什麼意思?如果它會「刪除完整的路徑」會發生什麼? –

+0

「user/tester/noob''中的完整路徑。 IE刪除包含測試儀和菜單的用戶目錄。 –

+0

@IT忍者:測試結果是什麼? - 步驟1 – user1801810

回答

40

如果noob是一個目錄,shutil.rmtree()函數將刪除noob及其下的所有文件和子目錄。即,noob是要刪除的樹的根。

24

這絕對只會刪除指定路徑中的最後一個目錄。 只是嘗試一下:

mkdir -p foo/bar 
python 
import shutil 
shutil.rmtree('foo/bar') 

...只會刪除'bar'

11

這裏有一些誤解。

想象一下,一個樹是這樣的:

- user 
    - tester 
    - noob 
    - developer 
    - guru 

如果你想刪除user,只是做shutil.rmtree('user')。這也將刪除user/testeruser/tester/noob,因爲它們在user之內。但是,它也會刪除user/developeruser/developer/guru,因爲它們也在user之內。

如果rmtree('user/tester/noob')會刪除usertester,你的意思是,如果user不在了user/developer會存在嗎?


還是你的意思是說像http://docs.python.org/2/library/os.html#os.removedirs

它試圖刪除每個被刪除的目錄的父目錄,直到它失敗,因爲該目錄不是空的。因此,在我的示例樹中,os.removedirs('user/tester/noob')將首先刪除noob,然後它會嘗試刪除tester,這是可以的,因爲它是空的,但它會在user處停止,並且保持原狀,因爲它包含我們不想刪除的developer