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

Python使用shutil.copy按文件名分类文件触发FileNotFoundError如何解决

问题原因分析
  • 源文件路径缺失前缀目录:os.listdir()仅返回文件本身的名称,不会携带Downloaded_Data源目录前缀,你直接将filename作为shutil.copy2()的源路径参数时,程序默认在当前脚本运行的工作目录查找文件,自然找不到存放在Downloaded_Data下的目标文件。
  • 目标目录结构拼接错误:你构建dest_dir时错误拼接了filename参数,导致生成的路径为Input_Data/颜色_温度/组别/文件名,后续调用mkdir会直接把文件名创建为一个文件夹,完全不符合你预期的二级目录结构,也会导致后续拷贝路径错误。
  • 部分源文件名携带多余空白字符:你提供的文件列表中多个文件名末尾有空格,会导致分割文件名时获取到异常字段,报错信息中出现的Subject_Blue_Cold_D_A_1.csv .csv就是文件名末尾空格导致的拼接异常。
  • 依赖库导入缺失:你的代码没有导入shutil和pathlib.Path两个依赖,运行时会先触发名称未定义的报错。
修复后可运行代码
import os
import shutil
from pathlib import Path

source_folder = Path("Downloaded_Data")
dest_root_dir = Path("Input_Data")

# 遍历源目录下所有csv文件
for file_path in source_folder.glob("*.csv"):
    # 去除文件名首尾空白,避免多余空格干扰逻辑
    filename = file_path.name.strip()
    name_parts = filename.split("_")
    # 校验文件名格式,跳过不符合规则的异常文件
    if len(name_parts) < 6:
        print(f"跳过不符合命名规则的文件:{filename}")
        continue
    
    # 拼接两级子目录名称
    first_folder = f"{name_parts[1]}_{name_parts[2]}"
    second_folder = f"D{name_parts[4]}"
    # 目标目录仅拼接至二级子目录,不要加入文件名
    dest_dir = dest_root_dir / first_folder / second_folder
    # 创建多级目录,parents=True自动补全缺失的父目录
    dest_dir.mkdir(exist_ok=True, parents=True)
    
    # 拷贝时源文件用完整路径,目标路径为目标目录+文件名
    shutil.copy2(file_path, dest_dir / filename)

内容的提问来源于stack exchange,提问作者LostinSpatialAnalysis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:30:03