2012-06-03 26 views
25

Bu işlevin doc'larını okudum, ancak bunu doğru bir şekilde anladığımı düşünmüyorum ve eğer birileri yanlış düşünmemi söyleyemiyorsa, ya da doğruysa, bir büyük yardım İşte benim anlayışım: shutil.rmtree(path) işlevini kullanarakshutil.rmtree() açıklama

işlevini, yalnızca belirtilen dizini değil, tüm yolu siler. IE: Bu kullanarak

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

, sadece doğru 'çaylak' dizini silmek istiyorsunuz? tam yol değil mi?

+0

"Tam yol değil" ile ne demek istiyorsun? "Tam yolu silecek" olsaydı ne olurdu? –

+0

, '' user/tester/noob '' içindeki tam yol. IE test cihazı ve noob içeren kullanıcı dizinini silin. –

+0

@IT Ninja: Test ettiğinizde sonuç neydi? -Step 1 – user1801810

cevap

40

Noob bir dizin ise, shutil.rmtree() işlevi noob ve altındaki tüm dosyalar ve alt dizinleri siler. Yani, noob kaldırılacak ağacın köküdür.

24

Bu, kesinlikle belirtilen yoldaki son dizini kesinlikle siler. Sadece denemek:

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

... sadece 'bar' kaldıracaktır.

11

Burada bazı yanlış anlaşılma var.

bir ağaç böyle düşünün:

- user 
    - tester 
    - noob 
    - developer 
    - guru 

sadece shutil.rmtree('user') yapın user silmek isterseniz. Bu, user/tester ve user/tester/noob öğelerini de user içinde oldukları gibi silecektir. Bununla birlikte,ve user/developer/guru'u da silecektir, aynı zamanda user'un içinde de olacaktır.

rmtree('user/tester/noob')user ve tester silmek istiyorsanız, nasıl user gitti ise user/developer var olamazdı demek?


Yoksa http://docs.python.org/2/library/os.html#os.removedirs gibi bir şey mi kastediyorsunuz?

Dizini boş olmadığı için, kaldırılan her dizinin üst öğeyi başarısız olana kadar kaldırmaya çalışır. Yani benim örnek ağacımda, os.removedirs('user/tester/noob') ilk noob kaldırır, o zaman o boş olduğu için tester kaldırmak için çalışacağız, ama user durduracak ve developer, silmek istemiyoruz çünkü yalnız bırakın .