Python移动文件时出现[WinError 5] Access is denied报错如何解决?
问题根源
- 你代码里的
os.replace()参数使用不符合要求:当你要把文件移动到目标目录时,dst参数必须指定完整的目标文件路径,而不是只传目录路径。你现在只传了桌面目录路径,系统会尝试把源文件直接替换成这个目录对象,自然会触发权限/操作不允许的报错,和你有没有管理员权限基本没关系。
修复方案
方法1:手动拼接目标完整路径
直接在dst里带上源文件的文件名,修改后代码如下:
import os src = "C:\\INSTALLER\\sample_text.txt" # 目标路径补全文件名即可 dst = "C:\\Users\\mats\\Desktop\\sample_text.txt" try: os.replace(src, dst) print("File successfully moved...") except Exception as x: print(x) print("\nSomething happened! :(")
方法2:自动提取文件名拼接(通用性更强)
如果不想手动写文件名,可以用os.path.basename()自动获取源文件的文件名拼接,适合批量移动文件的场景:
import os src = "C:\\INSTALLER\\sample_text.txt" dst_dir = "C:\\Users\\mats\\Desktop" # 自动拼接完整目标路径 dst = os.path.join(dst_dir, os.path.basename(src)) try: os.replace(src, dst) print("File successfully moved...") except Exception as x: print(x) print("\nSomething happened! :(")
可选方案:使用shutil.move简化操作
如果你不想手动拼接文件名,可以直接用shutil模块的move方法,它支持直接传入目标目录路径,会自动处理文件名的拼接:
import shutil src = "C:\\INSTALLER\\sample_text.txt" dst = "C:\\Users\\mats\\Desktop" try: shutil.move(src, dst) print("File successfully moved...") except Exception as x: print(x) print("\nSomething happened! :(")
额外排查点
如果修改后还是报错,可以再检查这两项:
- 确认源文件
C:\\INSTALLER\\sample_text.txt没有被其他程序(比如记事本、Office软件)占用打开 - 确认目标目录你当前的用户确实有写入权限,不需要特意开PyCharm的管理员权限,普通用户权限默认就有桌面目录的写入权限
内容的提问来源于stack exchange,提问作者node247
相关产品推荐
相关产品推荐

