如何用Python通过结构化数据批量移动指定home编号的文件
解决方案
可以通过定义结构化的映射关系替代繁琐的if/elif分支,让分组规则更易维护。以下是优化后的实现:
完整代码
import shutil import os source = '/path/to/source_folder' # 用列表元组定义home编号组与目标文件夹的对应关系 # 格式:(home编号列表, 目标文件夹路径) home_dest_mapping = [ (['101', '103', '320'], '/path/to/FolderA'), (['555', '431', '105'], '/path/to/FolderB') ] # 预先创建所有目标文件夹(避免移动时因文件夹不存在报错) for _, dest_path in home_dest_mapping: if not os.path.exists(dest_path): os.makedirs(dest_path) # 遍历源文件夹中的文件 for filename in os.listdir(source): full_file_path = os.path.join(source, filename) # 跳过子文件夹,只处理文件 if not os.path.isfile(full_file_path): continue # 提取文件名中的home编号 if filename.startswith('home') and '_' in filename: home_prefix = filename.split('_')[0] home_num = home_prefix[4:] # 从"homeXXX"中截取三位编号 # 匹配对应的目标文件夹并移动 for group_nums, dest in home_dest_mapping: if home_num in group_nums: shutil.move(full_file_path, dest) break else: # 未匹配到任何分组时的处理(可根据需求修改) print(f"跳过无匹配分组的文件:{filename}") else: # 不符合命名格式的文件处理 print(f"跳过格式不符的文件:{filename}")
关键优化点
- 结构化规则管理:所有分组规则集中在
home_dest_mapping中,新增/修改分组只需调整这个列表,无需修改循环逻辑。 - 路径严谨性:用
os.path.join拼接完整文件路径,解决原代码中因工作目录不一致导致的文件找不到问题。 - 容错处理:
- 自动创建目标文件夹,避免移动失败
- 跳过子文件夹、格式不符的文件
- 对未匹配到分组的文件给出提示(可按需改为移动到默认文件夹或其他操作)
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

