Python 3.6按列表唯一标识符移动子文件夹文档的技术求助
Python文件分类解决方案(适配3.6版本)
嘿,作为Python新手遇到这种文件批量分类的需求太正常啦!我给你整理了一套简单易上手的方案,完全适配Python 3.6,一步步帮你把指定文件挪到对应文件夹里。
核心思路
咱们先理清楚要做的事儿:
- 遍历源文件夹(比如你说的
All/A)里的所有文件 - 检查每个文件名是否包含你的目标标识符(比如
768) - 给每个标识符创建对应的目标文件夹(如果不存在的话)
- 把匹配的文件移动到对应的文件夹里
完整代码实现
首先咱们要用到Python内置的os和shutil模块,这俩模块在3.6里都是自带的,不用额外安装。
import os import shutil # ---------------------- 你需要根据自己的情况修改这些参数 ---------------------- # 源文件夹:就是存放待处理文件的地方(比如你的All/A文件夹) source_directory = "./All/A" # 目标标识符列表:把你需要匹配的ID都放这里 target_identifiers = ['768'] # 实际场景可以加更多,比如['768', '123', '921'] # 目标根文件夹:用来存放各个ID对应子文件夹的地方(比如这里用All文件夹) target_root = "./All" # --------------------------------------------------------------------------- # 遍历源文件夹中的所有条目 for file_name in os.listdir(source_directory): # 拼接出文件的完整路径 full_file_path = os.path.join(source_directory, file_name) # 只处理文件,跳过子文件夹 if os.path.isfile(full_file_path): # 方式1:模糊匹配——检查标识符是否在文件名中 for identifier in target_identifiers: if identifier in file_name: # 构建当前标识符对应的目标文件夹路径 target_folder = os.path.join(target_root, identifier) # 如果目标文件夹不存在,就创建它 if not os.path.exists(target_folder): os.makedirs(target_folder) # 移动文件到目标文件夹 shutil.move(full_file_path, os.path.join(target_folder, file_name)) print(f"✅ 已移动文件: {file_name} -> {target_folder}") # 找到匹配的ID后就跳出循环,避免重复处理 break # ---------------------- 可选:精准匹配方式 ---------------------- # 如果你的文件名格式固定(比如都是'XXX - words'),可以用下面的精准匹配 # try: # # 从文件名中提取标识符部分 # extracted_id = file_name.split(" - ")[0] # if extracted_id in target_identifiers: # target_folder = os.path.join(target_root, extracted_id) # if not os.path.exists(target_folder): # os.makedirs(target_folder) # shutil.move(full_file_path, os.path.join(target_folder, file_name)) # print(f"✅ 已移动文件: {file_name} -> {target_folder}") # except IndexError: # # 跳过格式不符合的文件 # print(f"⚠️ 跳过不符合格式的文件: {file_name}")
注意事项
- 路径问题:如果是Windows系统,路径可以用反斜杠(记得写两个
\\)或者原始字符串,比如r".\All\A" - 复制 vs 移动:如果不想删除源文件,只想复制,把
shutil.move换成shutil.copy2,这样还能保留文件的创建时间等元数据 - 权限问题:确保你的Python程序有读取源文件和写入目标文件夹的权限,不然会报错哦
- 精准匹配:如果文件名里的标识符是固定位置的,推荐用注释里的精准匹配方式,避免文件名其他地方出现相同数字导致误匹配
内容的提问来源于stack exchange,提问作者J. Dykstra
相关产品推荐
相关产品推荐

