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

基于CSV的Image_Name与Complexity用Python创建子文件夹并迁移图片

问题:按CSV标签批量迁移图片到对应子目录

需求说明

需要根据DF.csv中的Complexity标签,将Images文件夹下的所有图片分类迁移到Subfolder下的Basic、Moderate、Complex子目录中。

当前文件夹结构

  • Folder
    • Images(存放所有待分类图片)
    • DF.csv(包含图片名称与对应分类标签)

目标文件夹结构

  • Subfolder
    • Basic
    • Moderate
    • Complex

CSV数据示例

indexTitleIngredientsImage_NameIngredient CountComplexity
1香酥盐椒土豆['2个大蛋白', '1磅新土豆(直径约1英寸)', '2茶匙粗盐', '¾茶匙现磨黑胡椒', '1茶匙切碎迷迭香', '1茶匙切碎百里香', '1茶匙切碎欧芹']crispy-salt-and-pepper-potatoes-dan-kluger6Basic
2感恩节芝士通心粉['1杯淡奶', '1杯全脂牛奶', '1茶匙大蒜粉', '1茶匙洋葱粉', '1茶匙烟熏甜椒粉', '½茶匙现磨黑胡椒', '1茶匙粗盐(额外备用)', '2磅特浓切达干酪(粗磨)', '4盎司全脂奶油奶酪', '1磅通心粉']thanksgiving-mac-and-cheese-erick-williams11Moderate
3意大利香肠面包馅料['1个(¾-1磅)圆形意大利面包(切1英寸方块,共8杯)', '2汤匙橄榄油(分份)', '2磅甜意大利香肠(去肠衣,分份)', '1条无盐黄油(切块)', '3个中等大小洋葱(切碎)', '4根西芹(切碎)', '5瓣大蒜(切末)', '4个大鸡蛋(打散)', '¾杯浓奶油(分份)', '½杯火鸡杂汤或低钠鸡汤', '1杯帕玛森芝士碎(2盎司)', '½杯切碎意大利欧芹', '1个4夸脱浅口陶瓷/玻璃烤碗']italian-sausage-and-bread-stuffing-24055922Complex

初始代码

import pandas as pd
df = pd.read_csv("DF.csv")
df.head()

解决方案

以下是完整的实现代码,包含自动创建目录、多格式图片匹配、异常跳过等功能,确保迁移过程稳定可靠:

import pandas as pd
import os
import shutil

# 配置核心路径
base_dir = os.getcwd()  # 默认当前工作目录为Folder所在路径,可手动修改
images_source = os.path.join(base_dir, "Images")
target_root = os.path.join(base_dir, "Subfolder")
csv_file = os.path.join(base_dir, "DF.csv")

# 1. 读取CSV数据
df = pd.read_csv(csv_file)

# 2. 预创建目标分类目录
target_folders = ["Basic", "Moderate", "Complex"]
for folder in target_folders:
    folder_path = os.path.join(target_root, folder)
    os.makedirs(folder_path, exist_ok=True)  # 自动跳过已存在的目录

# 3. 遍历CSV记录,执行图片迁移
# 支持的图片扩展名,可根据实际情况补充
image_exts = [".jpg", ".jpeg", ".png", ".webp", ".gif"]

for _, row in df.iterrows():
    img_name = row["Image_Name"]
    category = row["Complexity"]
    
    # 查找对应图片的实际路径(匹配扩展名)
    source_path = None
    for ext in image_exts:
        candidate = os.path.join(images_source, f"{img_name}{ext}")
        if os.path.exists(candidate):
            source_path = candidate
            break
    
    if not source_path:
        print(f"⚠️ 未找到图片文件:{img_name},跳过迁移")
        continue
    
    # 构建目标路径
    target_folder = os.path.join(target_root, category)
    target_path = os.path.join(target_folder, os.path.basename(source_path))
    
    # 执行迁移(跳过已存在的文件,避免覆盖)
    if not os.path.exists(target_path):
        shutil.move(source_path, target_path)
        print(f"✅ 已迁移:{os.path.basename(source_path)} -> {category}")
    else:
        print(f"ℹ️ 文件已存在:{target_path},跳过")

print("\n所有图片迁移操作完成")

关键注意事项

  • 路径适配:如果运行代码时的工作目录不是Folder,需手动修改base_dir为Folder的绝对路径
  • 扩展名扩展:若你的图片有其他格式,直接将扩展名添加到image_exts列表即可
  • 安全机制:代码会自动跳过找不到的图片和已存在的目标文件,避免中断流程或覆盖数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:24:28