2014-10-29 98 views
0

我試圖刪除驅動器上的文件夾集合。這些目錄不是空的。我想出了一個解決方案如下:刪除驅動器上的文件夾

import shutil 
import os 

path = "main/" 
folderList = ['Blah', 'Blah', 'Blah']; 

print ("Cleaning Project at %s" % path) 

for c in folderList: 
    strippedPath = (path + c).strip("\n") 
    print ("Cleaning path " + strippedPath) 
    if os.path.exists(strippedPath): 
     try: 
      shutil.rmtree(strippedPath) 
     except OSError as why: 
      pass 

print ("Done Cleaning Project") 

的問題是,如果沒有的try/catch我得到那個說

PermissionError: [WinError 5] Access is denied: 'PathToFileHere' 

按Windows上的刪除鍵將正常工作,一個錯誤。有人可以給我一個命令,將刪除這個目錄沒有錯誤?

+0

我m在這裏顯然很明顯,但是這是因爲Python沒有來自操作系統的許可來完成該操作。這不是你可以在代碼中修復的東西;儘管可能有一些類似'subprocess'的解決方法。 – 2014-10-29 17:54:27

+0

是什麼讓這個特殊的文件夾如此特別?它消除了其餘的? – marsh 2014-10-29 17:55:28

+1

[Python:shutil.rmtree在Windows上失敗並且'Access is denied']可能重複](http://stackoverflow.com/questions/2656322/python-shutil-rmtree-fails-on-windows-with-access-is -denied) – Alderven 2014-10-29 18:29:37

回答

1

首先,您應該避免默默吞下一個Exception,但至少要打印或記錄它。但是文件可能會發生很多事情,它們可能具有隱藏,系統或只讀屬性。當前用戶可能對文件沒有權限,但僅限於包含文件夾。由於Python是多平臺的,因此它的高級命令對於特定操作系統(本例中爲Windows)的優化可能不如本地操作系統。

你應該首先嚐試確認在cmd窗口,命令rd /s folder正確刪除shutil.rmtree無法刪除的文件夾,如果是問蟒蛇所以執行它爭奪的subprocess模塊:

subprocess.call("rd /s/q " + strippedPath) 
相關問題