【问题标题】:shutil.rmtree() raises exception WindowsError: Access is denied:shutil.rmtree() 引发异常 WindowsError:访问被拒绝:
【发布时间】:2013-11-01 14:33:18
【问题描述】:

尝试使用 python 脚本自动删除文件,我得到:

Traceback (most recent call last):
  Python script "5", line 8, in <module>
    shutil.rmtree(os.path.join(root, d))
  File "shutil.pyc", line 221, in rmtree
  File "shutil.pyc", line 219, in rmtree
WindowsError: [Error 5] Access is denied: 'C:\\zDump\\TVzip\\Elem.avi'

使用这个

import os
import shutil

for root, dirs, files in os.walk(eg.globals.tvzip):
    for f in files:
        os.remove(os.path.join(root, f))
    for d in dirs:
        shutil.rmtree(os.path.join(root, d))

for root, dirs, files in os.walk(eg.globals.tvproc):
    for f in files:
        os.remove(os.path.join(root, f))
    for d in dirs:
        shutil.rmtree(os.path.join(root, d))

所有都以管理员身份运行,有什么帮助吗?

【问题讨论】:

  • 检查以确保文件不是read only。也有可能该文件还有一个打开的文件句柄。
  • 尝试os.chmod,然后再次尝试删除它
  • 非常感谢,文件夹的权限发生了一些变化。谢谢!!!

标签: python


【解决方案1】:

虽然我无法评论 Windows 权限(或缺少权限),但假设您拥有正确的权限,那么确实很可能是打开的文件句柄。

我只是想提一下,shutil.rmtree 会清除它删除的目录中的所有文件......所以你可以将你的算法切成两半,并停止一个接一个地删除文件。

【讨论】:

  • 虽然我找到了错误的原因,但文件夹权限设置为只读。错误不断发生。上述 Python 脚本中的某些内容将权限更改为只读,因此在下次运行时会失败。有谁知道导致这种情况发生的原因,或者如何避免每次运行时更改权限?谢谢
【解决方案2】:

通常,当您尝试删除的路径是read-only 时,Windows 上会出现此错误。您可以尝试以下可能可行的方法:

import stat
import os

def make_dir_writable(function, path, exception):
    """The path on Windows cannot be gracefully removed due to being read-only,
    so we make the directory writable on a failure and retry the original function.
    """
    os.chmod(path, stat.S_IWRITE)
    function(path)

if os.path.exists(path):
    shutil.rmtree(path, onerror=make_dir_writable)

可以在此处找到有关该主题的文档:https://docs.python.org/3.9/library/shutil.html#shutil.rmtree

【讨论】:

    猜你喜欢
    • 2013-09-03
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多