使用python os.rmdir时,得到PermissionError: [WinError 5] Access is denied
Posted
技术标签:
【中文标题】使用python os.rmdir时,得到PermissionError: [WinError 5] Access is denied【英文标题】:When using python os.rmdir, get PermissionError: [WinError 5] Access is denied 【发布时间】:2016-07-21 11:41:00 【问题描述】:我正在构建一个文件传输脚本,源代码清理功能使用os.rmdir('C:\\Users\\Grav\\Desktop\\TestDir0\\Om')
。这是我得到的错误:
PermissionError: [WinError 5] Access is denied: 'C:\\Users\\Grav\\Desktop\\TestDir0\\Om'
我通过 Windows 7 检查了文件夹 Om
的权限,它们被设置为允许删除我的用户帐户。我还尝试将我的解释器设置为以管理员身份运行。问题仍然存在,我被困住了。非常感谢任何有洞察力的人!
【问题讨论】:
您在尝试删除之前是否在代码中关闭了文件? 在 Windows 中,您无法*访问或删除被其他进程打开的文件。有人称其为功能。 * 至少不用对 win32 api 做一些奇怪的修改 我实际上并没有打开文件(另外,它是一个文件夹,所以我不确定 Python 是否像文件一样将其视为“打开”或“关闭”对象),但我确实使用 shutil.copytree 复制了包含它的树。也许复制功能使文件夹对象处于“打开”状态? 【参考方案1】:在删除目录之前尝试删除目录中的所有文件:
import os
path_to_dir = 'C:\\Users\\Desktop\\temp' # path to directory you wish to remove
files_in_dir = os.listdir(path_to_dir) # get list of files in the directory
for file in files_in_dir: # loop to delete each file in folder
os.remove(f'path_to_dir/file') # delete file
os.rmdir(path_to_dir) # delete folder
【讨论】:
【参考方案2】:取消选中文件/文件夹属性中的只读属性框。
【讨论】:
你如何以编程方式做到这一点?【参考方案3】:我也有同样的问题,可以通过shutil
模块解决。
import shutil
shutil.rmtree('/path/to/your/dir/')
【讨论】:
【参考方案4】:我在这里找到了解决方案:What user do python scripts run as in windows?
似乎有问题的文件夹具有顽固的只读属性。添加一个处理程序来更改这些只读标志对我来说就像一个魅力。
所有发布建议的人,你们帮我找到了最终的答案,所以谢谢!
【讨论】:
【参考方案5】:你能检查一下:
-
您不在目录
0m
中并从那里运行脚本。
您没有打开任何列出0m
目录的窗口。
由于0m
是TestDir0
的子目录,因此您对TestDir0
具有正确的权限
【讨论】:
当然可以。我没有从Om
运行,除了解释器和 Notepad++ 中的 .py 文件本身之外,我没有打开任何窗口,并且我拥有 TestDir0
的权限。以上是关于使用python os.rmdir时,得到PermissionError: [WinError 5] Access is denied的主要内容,如果未能解决你的问题,请参考以下文章
python-os.rmdir与shutil.rmtree的区别和用法