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

基于文件名的文件跨文件夹分类代码故障排查请求

照片分类函数问题排查与修复

先来说说你的代码里几个导致无法正常运行的核心问题:

  • 缺失必要模块导入:代码里用到了os、re、shutil但没有导入,运行时会直接报NameError
  • 正则表达式逻辑错误:你写的re.match(r'.*x.*', filename)是在找文件名里的字母x,而不是你定义的波长变量x,完全偏离了匹配目标波长的需求
  • 只处理了单一波长:你循环了wavelengths列表,但只对1550_R_做了处理,其他三个波长(1550_、1050_R_、1200_)完全没执行任何逻辑
  • 未处理文件/文件夹区分:os.listdir会返回文件夹里的所有项,包括子文件夹,直接处理会导致报错
  • 未确保目标文件夹存在:如果dir_name对应的文件夹不存在,shutil.copy会抛出异常

下面是修复后的完整代码,我还优化了分类逻辑,让每个波长对应独立的子文件夹,更符合你的分类需求:

import os
import re
import shutil

def sort_photos(source_folder, base_target_dir):
    # 定义波长与目标子文件夹的映射,方便扩展和维护
    wavelength_target_map = {
        "1550_R_": "1550_R",
        "1550_": "1550",
        "1050_R_": "1050_R",
        "1200_": "1200"
    }

    for item in os.listdir(source_folder):
        item_path = os.path.join(source_folder, item)
        # 只处理文件,跳过子文件夹
        if not os.path.isfile(item_path):
            continue

        # 遍历所有波长规则,匹配文件名
        for wavelength, target_subdir in wavelength_target_map.items():
            # 检查文件名是否包含当前波长标识
            if wavelength in item:
                # 构建完整目标文件夹路径
                target_dir = os.path.join(base_target_dir, target_subdir)
                # 确保目标文件夹存在,不存在则创建
                os.makedirs(target_dir, exist_ok=True)
                # 复制文件到目标文件夹
                shutil.copy(item_path, target_dir)
                print(f"已将文件 {item} 复制到 {target_dir}")
                # 匹配到一个波长后就跳出循环,避免重复处理
                break
        else:
            # 如果没有匹配到任何波长,打印提示
            print(f"文件 {item} 未匹配到任何波长规则,跳过处理")

使用说明:

  1. 调用函数时,传入源文件夹路径和基础目标文件夹路径,比如:
    sort_photos("你的源照片文件夹路径", "你的分类存放根文件夹路径")
    
  2. 函数会自动在基础目标文件夹下创建对应波长的子文件夹(比如1550_R、1050_R等),并把匹配的文件复制进去
  3. 如果文件名匹配到多个波长(理论上你的命名规则不会出现),只会复制到第一个匹配的文件夹

内容的提问来源于stack exchange,提问作者SHIVANI DEEPAK CHOUDHARY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:42:59