如何使用Python批量按命名规则匹配文件并移动至不同目标文件夹
批量匹配移动文件实现方案
你直接书写通配符字符串无法生效的原因是:Python不会自动将字符串中的通配符解析为文件名匹配规则,只会将其作为普通文件名查找,自然会报文件不存在的错误。你可以用Python标准库自带的glob模块实现通配符匹配,方案如下:
方案1:使用glob模块(适配简单通配符匹配需求)
import shutil import glob import os source_folder = r"C:/Users/...." # 定义两个目标文件夹路径 dest_a = r"C:/Users/..../A" dest_b = r"C:/Users/..../B" # 匹配所有结尾为_1的文件,如有.dat后缀可修改为 results_*_1.dat files_a = glob.glob(os.path.join(source_folder, "results_*_1*")) # 匹配所有结尾为_2的文件 files_b = glob.glob(os.path.join(source_folder, "results_*_2*")) # 移动到A文件夹 for file_path in files_a: file_name = os.path.basename(file_path) dest_path = os.path.join(dest_a, file_name) shutil.move(file_path, dest_path) # 移动到B文件夹 for file_path in files_b: file_name = os.path.basename(file_path) dest_path = os.path.join(dest_b, file_name) shutil.move(file_path, dest_path) print("所有文件移动完成!")
方案2:使用正则匹配(适配复杂规则需求)
如果后续需要更复杂的文件名匹配规则,可以结合os.listdir和正则表达式实现:
import shutil import os import re source_folder = r"C:/Users/...." dest_a = r"C:/Users/..../A" dest_b = r"C:/Users/..../B" # 定义匹配规则,可根据需求修改正则 pattern_a = re.compile(r'results_\d+_1') pattern_b = re.compile(r'results_\d+_2') for file_name in os.listdir(source_folder): source_path = os.path.join(source_folder, file_name) # 跳过文件夹,只处理文件 if not os.path.isfile(source_path): continue if pattern_a.match(file_name): shutil.move(source_path, os.path.join(dest_a, file_name)) elif pattern_b.match(file_name): shutil.move(source_path, os.path.join(dest_b, file_name)) print("所有文件移动完成!")
注意事项
- 推荐始终使用
os.path.join()拼接路径,避免手动拼接字符串时出现的斜杠遗漏、跨系统路径格式不兼容问题 - 如果你的文件有固定后缀(比如
.dat),可以将glob匹配规则修改为results_*_1.dat,避免匹配到不符合后缀要求的文件
内容的提问来源于stack exchange,提问作者UglyBetty
相关产品推荐
相关产品推荐

