You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:24:05