有重新创建文件夹的脚本:
# Remove folder (if exists) with all files
if os.path.isdir(str(os.path.realpath('..') + "\\my_folder")):
shutil.rmtree(os.path.realpath('..') + "\\my_folder", ignore_errors=True)
# Create new folder
os.mkdir(os.path.realpath('..') + "\\my_folder")
这几乎总是有效,但在某些情况下(在创建步骤中)我得到了
WindowsError: [Error 5] Access is denied: 'C:\\Path\\To\\my_folder'
什么可能导致此错误,我该如何避免?
答案 0 :(得分:7)
权限可能是问题,但我遇到了同样的问题' [错误5]访问被拒绝'在os.rename()
上,一个简单的重试循环能够在重试几次后重命名该文件。
for retry in range(100):
try:
os.rename(src_name,dest_name)
break
except:
print "rename failed, retrying..."
答案 1 :(得分:6)
什么可能导致此错误?
您根本无权访问您正在为当前正在运行的进程(python.exe)编写的文件夹,甚至可能无法访问该用户。除非您的用户是管理员,否则可能存在您没有写入权限的目录。
我该如何避免?
通常,为了避免这种异常,可以使用try
和except
块,在这种情况下,它将是IOError
。因此,如果您只是想忽略拒绝访问并继续使用脚本,您可以尝试:
try:
# Remove folder (if exists) with all files
if os.path.isdir(str(os.path.realpath('..') + "\\my_folder")):
shutil.rmtree(os.path.realpath('..') + "\\my_folder", ignore_errors=True)
# Create new folder
os.mkdir(os.path.realpath('..') + "\\my_folder")
except IOError:
print("Error upon either deleting or creating the directory or files.")
else:
print("Actions if file access was succesfull")
finally:
print("This will be executed even if an exception of IOError was encountered")
如果你真的没想到这个错误而且不应该发生这种情况,你必须更改文件的权限。 根据您的用户权限,您可以采取各种步骤。
可以管理员身份执行程序的用户: 选项A
cmd.exe
。cd
转到您的脚本位置,因为它将在C:\Windows\system32
处打开,除非您编辑了某些参数。> python myscript.py
。可以以管理员身份执行程序的用户: 选项B
没有管理员权限的用户:
答案 2 :(得分:5)
请参阅RemoveDirectory文档; " RemoveDirectory函数在关闭时标记要删除的目录。因此,在关闭目录的最后一个句柄之前,不会删除该目录。"
这意味着,如果某些内容设法创建了您删除的目录的句柄(在创建和删除之间),那么该目录实际上并未被删除,并且您的访问权限已被拒绝,39;
要解决此问题,请在删除之前重命名要删除的目录。
所以
while True:
mkdir('folder 1')
rmdir('folder 1')
可能会失败,解决;
while True:
mkdir('folder 1')
new_name = str(uuid4())
rename('folder 1', new_name)
rmdir(new_name)
答案 3 :(得分:1)
这是因为您没有检查是否有权打开该路径。您需要更改这些文件夹的权限。
答案 4 :(得分:1)
创建python脚本文件。在这种情况下,您可以将其复制到C:\ WINDOWS \ system32中。脚本文件正在创建名为“Smaog”的文件夹
import os
os.chdir('C:/Program Files')
os.makedirs('Smaog')
在您喜欢的任何文件夹中创建批处理文件。
echo off
title Renaming Folder
python sample.py
pause
保存批处理文件。要运行它,请右键单击并选择以管理员身份运行
如果你不想把你的python脚本放在C:\ WINDOWS \ system32中,你可以选择这样做。 在批处理文件中,指明python脚本文件所在的文件夹/目录。
echo off
title Renaming Folder
cd c:\Users\Smaog\Desktop
python sample.py
pause
然后按照上面的说明以管理员身份运行它。
答案 5 :(得分:0)
我在将Py2切换到Py3之后昨晚遇到了这个问题,并意识到我正在为所有用户安装它。这意味着您将其安装到 Program Files 目录中,而不是%AppData%。大多数以管理员身份运行解决了这个问题,就像你上面的一些人所说,但我使用的是VSCode,有时甚至是PyCharm,并喜欢在其中使用终端。即使您尝试以管理员身份运行这些程序,在尝试专注于您可爱的代码时也会有很多烦人的事情。
我的解决方案:
1)完全卸载(包括 Py Launcher )
2)然后使用自定义安装使用提供的安装程序但是......
3)不要选择安装所有用户选项。
我认为,如果没有任何“[错误5]”行在您的命令提示符下,这将使您的日子更加轻松,因为它对我有用。
答案 6 :(得分:0)
对我来说,它是这样工作的:
while os.path.isdir (your_path):
shutil.rmtree (your_path, ignore_errors=True)
os.makedirs (your_path)