使用Python复制文件夹到指定路径时报PermissionError如何解决
错误原因
- 接口调用错误:
shutil.copy2()仅支持复制单个文件,你传入文件夹路径调用该接口时,操作系统会尝试以读取文件的方式读取文件夹,没有对应操作权限,就会抛出Errno 13权限错误,这是该场景下最常见的触发原因。 - 实际权限不足:如果排除接口问题后仍报错,可能是两种情况:一是当前Windows账号没有你选中的源文件夹的读取权限,二是你设置的目标路径
/data在Windows下默认指向当前磁盘根目录的data文件夹,普通用户默认没有根目录写入权限。
解决方案
- 替换文件夹复制接口,使用
shutil.copytree()完成文件夹的递归复制,同时补充目标路径的存在性判断,避免重复复制报错。 - 修正目标路径写法,Windows环境建议写完整绝对路径(比如
C:/data),避免相对路径/根路径的权限问题。 - 如果确实是系统权限不足,右键点击你运行代码的IDE或终端,选择以管理员身份运行后再执行代码即可。
修正后可运行代码示例
from tkinter import filedialog from tkinter import * import shutil import os window = Tk() window.title("copyfolder") window.geometry("210x50") folderPath = StringVar() def select_folder(): folder_selected = filedialog.askdirectory() # 处理用户主动取消选择文件夹的边界情况 if not folder_selected: return folderPath.set(folder_selected) src_folder = folderPath.get() # 可自行修改为你需要的目标根路径 target_root = "C:/data" # 自动创建目标根目录,不存在则创建,已存在则跳过 os.makedirs(target_root, exist_ok=True) # 保留源文件夹的名称,拼接得到完整目标路径 folder_name = os.path.basename(src_folder) target_full_path = os.path.join(target_root, folder_name) # 如果目标路径已存在,先删除原有内容,重要数据请修改为自行重命名逻辑避免误删 if os.path.exists(target_full_path): shutil.rmtree(target_full_path) # 递归复制整个文件夹 shutil.copytree(src_folder, target_full_path) print("Complete") Button(window,text="select",command=select_folder).place(x=80,y=10) window.mainloop()
内容的提问来源于stack exchange,提问作者user15189401
相关产品推荐
相关产品推荐

