求助:如何用Python根据文件名指定片段批量分类文件到对应文件夹
按文件名片段批量整理图片的Python实现
实现逻辑
- 调用Python内置的
os库处理文件路径、shutil库执行文件移动操作,无需安装额外依赖 - 遍历指定源文件夹下的所有图片文件
- 对符合格式要求的文件名按下划线
_拆分,取下标为1的片段(Python索引从0开始,对应文件名的第二个片段)作为分类文件夹名称 - 自动创建不存在的分类文件夹,将对应文件移动到目标文件夹中
- 文件名格式不符合要求的文件统一归类到
_未分类文件夹,避免程序运行报错
完整代码
import os import shutil # -------------------------- 配置修改区 -------------------------- # 存放待整理图片的文件夹路径 # Windows系统路径请加r前缀,例如 r"C:\Users\用户名\Desktop\待整理图片" source_folder = "/path/to/your/picture/folder" # 需要处理的图片后缀,可按需增删 allowed_extensions = [".jpeg", ".jpg", ".png", ".gif"] # 不符合命名规则的文件存放目录名称 unsorted_folder_name = "_未分类" # ---------------------------------------------------------------- # 提前创建未分类文件夹 unsorted_path = os.path.join(source_folder, unsorted_folder_name) os.makedirs(unsorted_path, exist_ok=True) # 遍历源文件夹下的所有内容 for file_name in os.listdir(source_folder): # 拼接得到文件的完整路径 file_full_path = os.path.join(source_folder, file_name) # 跳过子文件夹,仅处理文件 if not os.path.isfile(file_full_path): continue # 校验文件后缀是否为需要处理的图片格式,忽略大小写 file_ext = os.path.splitext(file_name)[1].lower() if file_ext not in allowed_extensions: continue # 拆分不带后缀的文件名 file_name_no_ext = os.path.splitext(file_name)[0] name_segments = file_name_no_ext.split("_") # 判断文件名拆分后的片段数量是否符合要求 if len(name_segments) >= 2: target_folder_name = name_segments[1] else: target_folder_name = unsorted_folder_name # 拼接目标分类文件夹的完整路径,不存在则自动创建 target_folder_path = os.path.join(source_folder, target_folder_name) os.makedirs(target_folder_path, exist_ok=True) # 拼接目标文件的完整路径 target_file_full_path = os.path.join(target_folder_path, file_name) # 执行文件移动操作 shutil.move(file_full_path, target_file_full_path) print("所有图片整理完成")
注意事项
- 运行代码前请务必备份所有待整理图片,避免误操作导致文件丢失
- 你给出的示例文件
210526 BL RL4_QRS Eur F699-1-2-2-180_6702_02_03拆分后取到的第二个片段为QRS Eur F699-1-2-2-180,完全符合分类需求 - 如果同一个分类文件夹下存在重名文件,
shutil.move会直接覆盖原有文件,如有重名保留需求,可在移动文件前添加重命名逻辑,例如给重复文件名加序号后缀 - 仅处理配置的后缀名文件,非图片格式的文件会保留在源文件夹中不做处理
内容的提问来源于stack exchange,提问作者bshfrd
相关产品推荐
相关产品推荐

