You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

shutil.copyfile()抛出Errno2错误:目标文件不存在的排查求助

问题排查与解决:FileNotFoundError 目标路径不存在

核心问题分析

从报错信息看,系统找不到目标文件路径/Users/fredericpepin/TwoWaysSyncNAS/Bloc/Malouin/Factures/2023/A-1-[1/2]-TxsMncpls2023.pdf,主要原因有两个:

  1. 目标父目录不存在:sh.copyfile不会自动创建目标文件所在的目录,如果/Users/fredericpepin/TwoWaysSyncNAS/Bloc/Malouin/Factures/2023目录被删除、移动,或NAS挂载失效,就会触发该错误。
  2. 文件名包含非法字符:macOS(类Unix系统)不允许文件名包含/字符,你的目标文件名A-1-[1/2]-TxsMncpls2023.pdf里的/会被系统解析为路径分隔符,实际会尝试创建A-1-[1]子目录下的2]-TxsMncpls2023.pdf,导致路径不存在。

解决步骤

步骤1:验证目标父目录状态

在终端执行以下命令,确认目录是否存在:

ls -ld /Users/fredericpepin/TwoWaysSyncNAS/Bloc/Malouin/Factures/2023

如果输出提示No such file or directory,说明目录确实不存在,需要手动创建或在代码中自动生成。

步骤2:修复代码(自动创建目录+处理非法字符)

修改代码,加入目录创建逻辑,并替换文件名中的非法/字符:

import os
import shutil as sh

year = 2023
FileNameList = ['A-1-[1/2]-TxsMncpls2023.pdf', 'A-1-[2/2]-TxsMncpls2023.pdf']

# 使用enumerate遍历,避免手动维护索引i
for idx, src_path in enumerate(PathFile):
    # 替换文件名中的非法/字符
    valid_filename = FileNameList[idx].replace('/', '-')
    dst_path = f'/Users/fredericpepin/TwoWaysSyncNAS/Bloc/Malouin/Factures/{year}/{valid_filename}'
    
    # 创建目标文件所在的所有父目录,exist_ok=True避免已存在时报错
    os.makedirs(os.path.dirname(dst_path), exist_ok=True)
    
    # 执行复制
    sh.copyfile(src_path, dst_path)

步骤3:检查NAS挂载状态

路径包含TwoWaysSyncNAS,推测是网络挂载的NAS设备。在macOS中,如果NAS挂载断开,原挂载路径会变成空目录或不可访问,需要重新挂载NAS确保路径有效。

额外注意点

  • 权限设置777只对已存在的文件/目录有效,目录不存在时权限设置无意义。
  • 确保PathFile和FileNameList的长度一致,否则会触发索引越界错误,使用enumerate遍历能更直观地对应两个列表的元素。

内容的提问来源于stack exchange,提问作者Frédéric Pepin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:05:31