26

我正在处理一个测试用例,我为此创建了一些子目录。但是,我似乎不再有权删除它们。我的 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'

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

4

11 回答 11

35

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

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

这将:

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

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

os.path.join("c:\\", "temp", "new folder")
于 2012-07-24T06:18:50.797 回答
27

尝试内置的shutil模块

shutil.rmtree(folder+"New Folder")

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

于 2012-07-24T06:47:26.880 回答
13

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

os.chmod(filePath, 0o777)
os.remove(filePath)
于 2018-05-06T08:30:07.333 回答
12

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

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

用于os.removedirs()目录

于 2013-11-08T16:24:48.700 回答
7

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

import os
import shutil

for dir in os.listdir(folder):
    shutil.rmtree(os.path.join(folder,dir))
于 2012-07-24T06:54:52.133 回答
3

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

os.rmdir(path)
于 2019-04-28T13:50:25.203 回答
2

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

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

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

于 2021-01-30T23:55:25.093 回答
1

如果它是一个目录,那么只需使用:

os.rmdir("path")
于 2019-09-18T09:33:40.443 回答
0

您无法删除文件夹的原因是因为要删除 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: 驱动器中删除子文件夹

于 2018-09-18T05:56:16.520 回答
0

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

前任:

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

os.chmod(filePath, 0777)
os.remove(filePath)
于 2016-02-19T11:15:09.280 回答
0

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

import os

if os.path.exists("demofile.txt"):
  os.remove("demofile.txt")
else:
  print("The file does not exist")
于 2021-06-23T13:44:39.287 回答