2014-10-29 90 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)