在Python中删除只读目录

43 投票
7 回答
30446 浏览
提问于 2025-04-15 16:55

shutil.rmtree 在Windows系统上无法删除只读文件。有没有什么Python的命令可以像Linux里的“rm -rf”那样删除文件呢?为什么这件事这么麻烦呢?

7 个回答

4

另一种方法是在Windows上定义rmtree,如下所示:

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

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

win32api.SetFileAttributes(path, win32con.FILE_ATTRIBUTE_NORMAL)

来让文件不再是只读的。

72

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)

(我还没有测试过这个代码片段,但它应该能帮助你入门)

撰写回答