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

基于CSV标签批量移动图片至对应文件夹时遇复制失败错误求助

问题描述

我有一个包含多张图片的数据集,还有一个CSV文件,其中一列是图片名称,另一列是对应标签。我想把图片按标签归类到对应文件夹里,但操作失败,抛出了“无法复制文件”的错误。

我的实现代码

from __future__ import print_function
import pandas as pd
import shutil
import os
import sys

labels = pd.read_csv(r'c:\technocolab project2\img_quantity.csv')

train_dir = r'c:\technocolab project2\archive\img'
label = r'c:\technocolab project2\DR\label'
if not os.path.exists(label):
    os.mkdir(label)

for filename, class_name in labels.values:
    # Create subdirectory with `class_name`
    if not os.path.exists(label + str(class_name)):
        os.mkdir(label + str(class_name))
    src_path = os.path.join(train_dir + str(filename) + '.jpg')
    dst_path = os.path.join(label + str(class_name) + str(filename) + '.jpg')
    try:
        shutil.move(src_path, dst_path)
        print("sucessful")
    except IOError as e:
        print('Unable to copy file {} to {}'
              .format(src_path, dst_path))
    except:
        print('When try copy file {} to {}, unexpected error: {}'
              .format(src_path, dst_path, sys.exc_info()))

错误提示

error: unable to copy files

错误截图:
错误截图

问题分析与解决

你的代码存在几处路径拼接的核心错误,这是导致文件无法复制的主要原因:

  1. os.path.join用法错误:该函数需要传入多个独立的路径片段,而你先把路径和文件名硬拼接成字符串再传入,会导致路径缺少分隔符(比如变成c:\technocolab project2\archive\img123.jpg),系统无法识别正确路径。
  2. 类别文件夹路径错误:创建子文件夹时,label + str(class_name)没有添加路径分隔符,会生成c:\technocolab project2\DR\label0这类错误路径,系统找不到对应文件夹,自然无法完成文件移动。

修正后的代码

from __future__ import print_function
import pandas as pd
import shutil
import os
import sys

labels = pd.read_csv(r'c:\technocolab project2\img_quantity.csv')

train_dir = r'c:\technocolab project2\archive\img'
label_root = r'c:\technocolab project2\DR\label'
if not os.path.exists(label_root):
    os.makedirs(label_root)  # 用makedirs支持多级目录创建,容错性更强

for filename, class_name in labels.values:
    # 正确拼接类别文件夹路径
    class_dir = os.path.join(label_root, str(class_name))
    if not os.path.exists(class_dir):
        os.makedirs(class_dir)
    
    # 正确拼接源文件和目标文件路径
    src_path = os.path.join(train_dir, f"{filename}.jpg")
    dst_path = os.path.join(class_dir, f"{filename}.jpg")
    
    try:
        # 先检查源文件是否存在,避免无效报错
        if os.path.exists(src_path):
            shutil.move(src_path, dst_path)
            print(f"成功移动文件: {filename}.jpg")
        else:
            print(f"源文件不存在: {src_path}")
    except IOError as e:
        print(f"无法复制文件 {src_path} 到 {dst_path},错误信息: {e}")
    except Exception as e:
        print(f"移动文件 {src_path} 到 {dst_path} 时出现意外错误: {e}")

额外注意事项

  • 确认CSV的filename列没有带.jpg后缀,否则会生成xxx.jpg.jpg这类错误文件名;
  • 检查源文件夹train_dir内确实存在对应图片;
  • 确保程序拥有源文件夹和目标文件夹的读写权限,避免因权限不足导致操作失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:54:22