删除Python中的目录

时间:2009-12-11 17:29:20

标签: python directory delete-file

shutil.rmtree不会删除Windows上的只读文件。有一个python相当于“rm -rf”?为什么哦为什么这么痛苦?

6 个答案:

答案 0 :(得分:42)

shutil.rmtree可以使用错误处理函数,该函数在删除文件时会被调用。您可以使用它来强制删除有问题的文件。

灵感来自http://mail.python.org/pipermail/tutor/2006-June/047551.htmlhttp://techarttiki.blogspot.com/2008/08/read-only-windows-files-with-python.html

import os
import stat
import shutil

def remove_readonly(func, path, excinfo):
    os.chmod(path, stat.S_IWRITE)
    func(path)

shutil.rmtree(top, onerror=remove_readonly)

(我没有测试过该片段,但它应该足以让你开始了)

答案 1 :(得分:3)

如果从PyWin32导入win32api,可以使用:

win32api.SetFileAttributes(path, win32con.FILE_ATTRIBUTE_NORMAL)

使文件不再是只读文件。

答案 2 :(得分:3)

另一种方法是在Windows上将rmtree定义为

rmtree = lambda path: subprocess.check_call(['cmd', '/c', 'rd', '/s', '/q', path])

答案 3 :(得分:2)

ActiveState网站上有评论说:

  

shutil.rmtree有它的缺点。虽然确实可以在很多情况下使用shutil.rmtree(),但在某些情况下它不起作用。例如,shutil.rmtree()无法删除在Windows下标记为只读的文件。

     

通过从PyWin32导入win32api和win32con模块并将类似“win32api.SetFileAttributes(path,win32con.FILE_ATTRIBUTE_NORMAL”)的行添加到rmgeneric()函数中,可以克服这个障碍。我使用这种方法来修复热备份Subversion 1.4的.py脚本,所以它可以在Windows下运行。谢谢你的配方。

我不使用Windows,因此无法验证这是否有效。

答案 4 :(得分:2)

这是史蒂夫发布的变体,它使用相同的基本机制,并且测试了 : - )

What user do python scripts run as in windows?

答案 5 :(得分:2)

这可能会随着 Python 3.5 (目前 - 2015年6月 - 仍在开发中)的发布而修复,意思是在文档中提示这一点。

您可以找到错误报告herethis是相应的变更集。

请参阅Python 3.5 docs中新添加的示例:

import os, stat
import shutil

def remove_readonly(func, path, _):
    "Clear the readonly bit and reattempt the removal"
    os.chmod(path, stat.S_IWRITE)
    func(path)

shutil.rmtree(directory, onerror=remove_readonly)