Python优雅实现文件夹创建与.xlsx文件分类移动的优化方案问询
优化方案:用映射字典替代重复判断
核心思路是把地区关键词和目标文件夹的对应关系做成字典映射,不用写一堆if...elif,后续加新地区只需要在字典里加一行就行,代码更简洁易维护。
实现步骤(以Python为例)
- 定义地区与文件夹的映射关系
- 遍历源目录下的所有
.xlsx文件 - 匹配文件中的地区关键词,创建对应文件夹(不存在则创建)
- 移动文件到目标文件夹
代码示例(使用pathlib,更简洁的现代写法)
from pathlib import Path import shutil # 定义地区关键词 -> 目标文件夹的映射,可按需扩展 region_mapping = { "IND": "IND_Files", "KOR": "KOR_Files", "ASN": "ASN_Files" # 新增地区直接加在这里,比如 "JPN": "JPN_Files" } # 源文件夹路径,替换成你的实际路径 source_dir = Path("./your_source_folder") # 遍历所有xlsx文件 for file in source_dir.glob("*.xlsx"): # 遍历映射,匹配文件名中的地区关键词 for region, folder_name in region_mapping.items(): if region in file.name: target_dir = source_dir / folder_name # 创建目标文件夹(如果不存在) target_dir.mkdir(exist_ok=True) # 移动文件 shutil.move(str(file), str(target_dir / file.name)) # 找到匹配项后跳出循环,避免一个文件被多次匹配 break
代码说明
- 映射字典:把所有地区规则集中管理,新增/修改地区只需要调整字典,不用动核心逻辑
- glob遍历:
source_dir.glob("*.xlsx")高效筛选所有xlsx文件 - mkdir(exist_ok=True):避免重复创建文件夹的报错,不用额外判断文件夹是否存在
- break跳出循环:确保一个文件只被匹配一次(如果文件名同时包含多个关键词,取第一个匹配的)
进阶优化(处理多关键词冲突)
如果担心文件名同时包含多个地区关键词,可以加个日志提示,或者优先匹配优先级高的地区:
# 按优先级排序的映射(比如ASN优先级高于IND) region_mapping = [ ("ASN", "ASN_Files"), ("IND", "IND_Files"), ("KOR", "KOR_Files") ] for file in source_dir.glob("*.xlsx"): matched = False for region, folder_name in region_mapping: if region in file.name: target_dir = source_dir / folder_name target_dir.mkdir(exist_ok=True) shutil.move(str(file), str(target_dir / file.name)) matched = True break if not matched: # 处理未匹配到地区的文件,比如移到"Uncategorized"文件夹 uncat_dir = source_dir / "Uncategorized" uncat_dir.mkdir(exist_ok=True) shutil.move(str(file), str(uncat_dir / file.name)) print(f"未匹配到地区,文件 {file.name} 已移至Uncategorized")
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

