无法删除os.remove文件夹(WindowsError:[错误5]访问被拒绝:'c:/ temp/New Folder')

Ser*_*lva 11 python windowserror

我正在研究一个测试用例,我为其创建了一些子目录.但是,我似乎没有权限删除它们.我的UA是管理员帐户(Windows XP).

我第一次尝试:

folder="c:/temp/" 
for dir in os.listdir(folder): 
    os.remove(folder+dir)
Run Code Online (Sandbox Code Playgroud)

然后

folder="c:/temp/" 
os.remove(folder+"New Folder")
Run Code Online (Sandbox Code Playgroud)

因为我确定"新文件夹"是空的.但是,在所有情况下,我得到:

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

有人知道出了什么问题吗?

Aes*_*ete 17

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

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

哪个会:

删除(删除)目录路径.仅在目录为空时才起作用,否则引发OSError.

使用os.path.join以下方法制作路径也更安全:

os.path.join("c:\\", "temp", "new folder")
Run Code Online (Sandbox Code Playgroud)


app*_*eev 17

尝试内置的shutil模块

shutil.rmtree(folder+"New Folder")
Run Code Online (Sandbox Code Playgroud)

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

  • 添加路径时应该使用 os.path.join() :) (5认同)

小智 11

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

os.chmod(filePath, 0o777)
os.remove(filePath)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。我认为这是对问题的实际答案。 (2认同)

8bi*_*ide 9

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

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

使用os.removedirs()的目录

  • os.rmdir()将删除一个空目录。shutil.rmtree()将删除目录及其所有内容。 (3认同)

Rak*_*esh 7

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

import os
import shutil

for dir in os.listdir(folder):
    shutil.rmtree(os.path.join(folder,dir))
Run Code Online (Sandbox Code Playgroud)


小智 5

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

os.rmdir("d:\\test")
Run Code Online (Sandbox Code Playgroud)

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