基于文件名的文件跨文件夹分类代码故障排查请求
照片分类函数问题排查与修复
先来说说你的代码里几个导致无法正常运行的核心问题:
- 缺失必要模块导入:代码里用到了
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} 未匹配到任何波长规则,跳过处理")
使用说明:
- 调用函数时,传入源文件夹路径和基础目标文件夹路径,比如:
sort_photos("你的源照片文件夹路径", "你的分类存放根文件夹路径") - 函数会自动在基础目标文件夹下创建对应波长的子文件夹(比如
1550_R、1050_R等),并把匹配的文件复制进去 - 如果文件名匹配到多个波长(理论上你的命名规则不会出现),只会复制到第一个匹配的文件夹
内容的提问来源于stack exchange,提问作者SHIVANI DEEPAK CHOUDHARY
相关产品推荐
相关产品推荐

