Python如何基于文件名特征自动创建文件夹并迁移匹配文件
批量按文件名特征分类的脚本修复方案
原代码缺陷说明
- 固定字符切片的文件夹名生成逻辑无法适配不同长度的分组前缀,比如测试文件中
filenameone_partone、filenameone_parttwo、filenametwo的长度不一致,固定切前10位会生成错误的文件夹名 - 未过滤待处理文件夹内的已有子目录,遍历过程中可能误将已生成的目标文件夹作为待处理文件处理
- 冗余的分支逻辑:原代码中文件夹存在/不存在两个分支都执行相同的复制操作,属于无效代码
核心适配逻辑
- 替换固定切片规则:识别文件名末尾的
下划线+数字格式的序号后缀,移除后缀后剩余的公共部分即为目标文件夹名,可自动适配本次需求的三类分组特征 - 增加目录过滤逻辑:遍历待处理目录时仅处理普通文件,跳过子目录
- 简化代码分支:移除冗余判断,文件夹不存在时自动创建,再执行文件迁移操作
修复后完整代码
import os import shutil # 替换为实际的工作目录绝对路径 WORK_PATH = "<abs path to desktop>" SOURCE_FOLDER = os.path.join(WORK_PATH, "folder") os.chdir(WORK_PATH) 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 # 按最后一个下划线拆分文件名,提取分组前缀 split_result = file_name.rsplit("_", 1) # 若末尾部分为纯数字,取前缀作为文件夹名,否则用完整文件名 if len(split_result) == 2 and split_result[1].isdigit(): target_folder = split_result[0] else: target_folder = file_name # 自动创建目标文件夹 if not os.path.exists(target_folder): os.mkdir(target_folder) # 迁移文件(如需保留原文件可将move替换为copy) shutil.move(file_full_path, os.path.join(target_folder, file_name))
适配效果验证
针对给出的7个测试文件,自动生成的目标文件夹及对应归集文件如下:
filenameone_partone:归集原序号1-3的3个文件filenameone_parttwo:归集原序号4-5的2个文件filenametwo:归集原序号6-7的2个文件
完全匹配需求的分类规则。
注:如果需要保留源文件夹内的原文件,仅需将代码中的
shutil.move替换为shutil.copy即可。
内容的提问来源于stack exchange,提问作者Ohm Dios
相关产品推荐
相关产品推荐

