【问题标题】:Can't remove a folder with os.remove (WindowsError: [Error 5] Access is denied: 'c:/temp/New Folder')无法使用 os.remove 删除文件夹(WindowsError:[错误 5] 访问被拒绝:'c:/temp/New Folder')
【发布时间】:2021-12-22 18:07:53
【问题描述】:

我正在处理一个测试用例,为此我创建了一些子目录。但是,我似乎不再有权删除它们。我的 UA 是管理员帐户 (Windows XP)。

我第一次尝试:

folder="c:/temp/" 
for dir in os.listdir(folder): 
    os.remove(folder+dir)

然后

folder="c:/temp/" 
os.remove(folder+"New Folder")

因为我确定“新文件夹”是空的。但是,在所有情况下,我都会得到:

Traceback (most recent call last): 
  File "<string>", line 3, in <module> 
WindowsError: [Error 5] Access is denied: 'c:/temp/New Folder'

有人知道怎么回事吗?

【问题讨论】:

    标签: python windowserror


    【解决方案1】:

    os.remove 需要文件路径,如果路径是目录,则引发OSError

    试试os.rmdir(folder+'New Folder')

    哪个会:

    移除(删除)目录路径。仅在目录为空时有效,否则会引发 OSError。

    使用 os.path.join 创建路径也更安全:

    os.path.join("c:\\", "temp", "new folder")
    

    【讨论】:

      【解决方案2】:

      试试内置的shutil模块

      shutil.rmtree(folder+"New Folder")
      

      这会递归删除一个目录,即使它有内容。

      【讨论】:

      • 酷!这就是我需要的!谢谢!
      • 添加路径时应该使用 os.path.join() :)
      【解决方案3】:

      对于 Python 3.6,文件权限模式应为 0o777:

      os.chmod(filePath, 0o777)
      os.remove(filePath)
      

      【讨论】:

      • 谢谢。我认为这是对问题的实际答案。
      • 这对我有用,但@Alexander 我很好奇——因为我们无论如何都要删除文件,这仍然是个问题吗?
      • 因为文件之后会被删除,所以设置perms为777应该没问题。将删除我之前的评论。
      【解决方案4】:

      os.remove() 仅适用于文件。它不适用于目录。根据documentation

      os.remove(路径) 移除(删除)文件路径。如果 path 是目录,则会引发 OSError;请参阅下面的 rmdir() 以删除目录。这与下面记录的 unlink() 函数相同。在 Windows 上,尝试删除正在使用的文件会引发异常;在 Unix 上,目录条目被删除,但分配给文件的存储空间在原始文件不再使用之前不可用。

      对目录使用os.removedirs()

      【讨论】:

      • os.rmdir() 将删除一个空目录。 shutil.rmtree() 将删除一个目录及其所有内容。
      【解决方案5】:

      你可以使用Shutil模块删除目录及其子文件夹

      import os
      import shutil
      
      for dir in os.listdir(folder):
          shutil.rmtree(os.path.join(folder,dir))
      

      【讨论】:

        【解决方案6】:

        如果你想删除文件夹,你可以使用

        os.rmdir(path)
        

        【讨论】:

          【解决方案7】:

          使用os.rmdir 而不是os.remove 删除文件夹

          os.rmdir("d:\\test")
          

          它将从d:\\目录中删除测试文件夹

          【讨论】:

            【解决方案8】:

            如果是目录,则使用:

            os.rmdir("path")
            

            【讨论】:

              【解决方案9】:

              文件处于只读模式,因此请通过os.chmod() 函数更改文件权限,然后尝试使用os.remove()

              例如:

              将文件权限更改为0777,然后删除文件。

              os.chmod(filePath, 0777)
              os.remove(filePath)
              

              【讨论】:

                【解决方案10】:

                不能删除文件夹的原因是要删除C:盘子文件夹,需要管理员权限 在 python 中调用管理员权限或执行以下 hack

                使用以下shell命令制作一个简单的.bat文件

                del /q "C:\Temp\*"
                
                FOR /D %%p IN ("C:\temp\*.*") DO rmdir "%%p" /s /q
                

                将它保存为 file.bat 并从你的 python 文件中调用这个 bat 文件

                Bat 文件将处理从 C: 驱动器中删除子文件夹

                【讨论】:

                  【解决方案11】:

                  无法使用 os.remove 删除文件夹

                  import os
                  
                  if os.path.exists("demofile.txt"):
                    os.remove("demofile.txt")
                  else:
                    print("The file does not exist")
                  

                  【讨论】:

                  • 所以你的答案是测试文件是否存在,如果不存在,那么它不会尝试删除它。但是 OP 正在询问该文件夹。
                  猜你喜欢
                  • 2011-03-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-03
                  • 2013-01-20
                  • 2016-10-16
                  • 1970-01-01
                  相关资源
                  最近更新 更多