Python调用shutil.copy复制文件到映射网络驱动器报错求解
报错说明
你遇到的FileNotFoundError [Errno 2] No such file or directory翻译为:文件未找到错误 [错误码2] 系统找不到指定的路径或文件。
问题根因
代码里共有3处可触发该报错的问题,按出现概率排序:
- 权限隔离问题:Windows系统下用户态映射的网络驱动器(Z盘),不会对管理员权限启动的程序可见。如果你是用右键「以管理员身份运行」打开的IDE/命令行启动Python,程序会直接判定Z盘路径不存在,这是映射盘复制场景最常见的报错原因。
- 语法错误:列表推导式行多写了冗余的
and关键字,if and path.isfile(...)属于非法语法,如果你运行时走到了复制步骤,大概率是贴代码时手滑多打了字符,实际本地运行时这行无语法问题。 - 目标目录不存在:
shutil.copy方法不会自动创建不存在的目标目录,如果Z:\test\文件夹没有提前手动创建,复制时会直接抛路径不存在的错误。 - 冗余代码:提前定义的
files = os.listdir(start_file)变量后续没有被调用,不影响运行但属于无效代码。
修复步骤
- 重启你的IDE/命令行,不要选择管理员身份运行,重新执行代码即可正常识别Z盘映射。如果业务要求必须用管理员权限运行程序,直接放弃盘符映射写法,改用网络共享UNC全路径作为目标路径,格式为
end_file = "\\\\共享服务器地址\\共享名\\test\\"。 - 复制前增加目标目录自动创建逻辑,避免因目录缺失报错。
- 修正列表推导式语法,删除无用变量。
修复后可运行代码
import os import shutil from os import path start_file = "C:\\data\\" end_file = "Z:\\test\\" # 自动创建目标目录,目录已存在时不会触发报错 os.makedirs(end_file, exist_ok=True) # 筛选源目录下的所有文件(排除子文件夹) file_list = [i for i in os.listdir(start_file) if path.isfile(path.join(start_file, i))] for f in file_list: source_path = path.join(start_file, f) shutil.copy(source_path, end_file)
排查校验技巧
如果修复后还是报错,先在代码开头加一行print(os.path.exists("Z:\\")):
- 如果输出为
False,说明当前运行环境识别不到Z盘,优先排查启动权限、映射是否生效、共享目录访问权限问题 - 如果输出为
True,再检查源目录C:\data\是否存在、当前用户对两个目录是否有读写权限
内容的提问来源于stack exchange,提问作者zibbiz1221
相关产品推荐
相关产品推荐

