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

Python批量按前缀复制JPG文件匹配失效问题求解

问题根因
  • 类型匹配错误:文件名拆分后的前缀ID是字符串类型,但原代码传入比对的num是整数类型,二者永远不相等,直接导致所有文件匹配失败
  • 缩进语法错误:if __name__ == '__main__':块、while True循环下的代码缩进混乱,不符合Python语法要求
  • 退出逻辑失效:annotationNum是存储整数ID的列表,永远不可能等于字符串q,原退出判断完全不生效
  • 路径拼接不规范:自定义slash变量存在作用域问题,且跨平台兼容性差
  • 裸异常捕获:所有报错被直接吞掉,无法定位复制失败的具体原因(比如权限不足、文件占用等)
修复后可直接运行的代码
import os
import shutil
import datetime

def copy_image(target_id_str, target_dir):
    match_flag = False
    # 遍历当前目录下所有文件
    for root, _, files in os.walk('./'):
        # 跳过目标输出目录,避免重复复制已经拷贝过的文件
        if root.startswith(target_dir):
            continue
        for file in files:
            if file.lower().endswith('.jpg') and file.split('_')[0] == target_id_str:
                match_flag = True
                src_path = os.path.join(root, file)
                dst_path = os.path.join(target_dir, file)
                try:
                    shutil.copy2(src_path, dst_path)
                except Exception as e:
                    print(f'复制文件{src_path}失败:{str(e)}')
    if match_flag:
        print(f'OK==> 前缀ID {target_id_str} 对应文件已完成复制')
    else:
        print(f'NG==> 前缀ID {target_id_str} 无对应匹配文件')

if __name__ == '__main__':
    while True:
        # 生成当天日期的目标文件夹名
        today_dir = str(datetime.date.today())
        # 自动处理跨平台路径分隔符,无需手动定义slash
        os.makedirs(today_dir, exist_ok=True)
        
        input_content = input("请输入要复制的前缀ID,多个ID用空格分隔,输入q退出:").strip()
        if input_content.lower() == 'q':
            break
        # 拆分输入的ID,直接保留字符串格式用于后续匹配
        id_list = input_content.split()
        for single_id in id_list:
            copy_image(single_id, today_dir)
使用说明
  • 将脚本放到JPG数据集所在的根目录下运行
  • 单次输入多个ID时直接用空格分隔即可,例如输入965 966 988 4后按回车
  • 程序会自动创建以当天日期命名的文件夹,将匹配到的文件复制到该文件夹内
  • 匹配到对应文件的ID会输出复制成功提示,无匹配文件的ID会输出不存在提示
  • 需要退出程序时直接输入q按回车即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:33:24