Python按Excel条件批量复制指定文件夹图片的问题求助
按Excel分组规则复制图片的脚本修复方案
原代码的核心问题
- 遍历Excel列时,
x和y只会保留最后一行的单元格值,无法建立对应行的文件名与分组的关联 shutil.copy使用相对文件名而非完整路径,会导致文件找不到的错误- 逻辑仅处理C组,未覆盖B组的复制需求
- 无差别打印"Failed",无法区分有效错误与正常不匹配情况
修复后的完整代码
import os import shutil from openpyxl import load_workbook # 配置路径与参数 source_dir = r"C:\Users\Downloads\From\" group_dirs = { "B": r"C:\Users\Downloads\From\Groups\B", "C": r"C:\Users\Downloads\From\Groups\C" } input_excel = "Script.xlsx" allowed_extensions = (".png", ".jpg") # 加前缀点,避免匹配到含png的非图片文件 # 读取Excel,建立文件名到分组的映射字典 file_group_map = {} wb = load_workbook(input_excel) ws = wb["Sheet1"] # 遍历Excel行(跳过表头,从第二行开始) for row in ws.iter_rows(min_row=2, values_only=True): filename, group = row[0], row[1] if filename and group: # 跳过空行 file_group_map[filename] = group # 遍历源文件夹的图片文件 for filename in os.listdir(source_dir): # 检查文件扩展名是否符合要求(转小写适配大小写混合的文件名) if filename.lower().endswith(allowed_extensions): # 拼接源文件完整路径 source_path = os.path.join(source_dir, filename) # 查找当前文件对应的分组 target_group = file_group_map.get(filename) if target_group and target_group in group_dirs: target_dir = group_dirs[target_group] # 确保目标文件夹存在(避免因文件夹不存在报错) os.makedirs(target_dir, exist_ok=True) # 执行复制操作 shutil.copy(source_path, target_dir) print(f"已复制: {filename} -> {target_dir}") else: print(f"未找到对应分组或分组无效: {filename}")
关键修改说明
- 映射字典优化:先将Excel中A列(文件名)与B列(分组)的对应关系存入字典,既保证行对应关系正确,又避免重复遍历Excel提升效率
- 完整路径处理:使用
os.path.join拼接源文件完整路径,解决shutil.copy找不到文件的问题 - 分组配置简化:用字典存储分组与目标路径的对应关系,后续新增分组只需修改字典,无需改动核心逻辑
- 容错机制增强:添加
os.makedirs(target_dir, exist_ok=True)确保目标文件夹存在;自动跳过Excel空行;仅在无对应分组时打印提示 - 扩展名匹配优化:添加
.前缀并转小写,避免误匹配如testpng.txt这类非图片文件
内容的提问来源于stack exchange,提问作者Dakshin Parivallal
相关产品推荐
相关产品推荐

