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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:05:10