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
相关产品推荐
相关产品推荐

