You need to enable JavaScript to run this app. Python如何基于文件名特征自动创建文件夹并迁移匹配文件
优惠活动
大模型
产品
解决方案
定价
更多

Python如何基于文件名特征自动创建文件夹并迁移匹配文件

批量按文件名特征分类的脚本修复方案

原代码缺陷说明

  • 固定字符切片的文件夹名生成逻辑无法适配不同长度的分组前缀,比如测试文件中filenameone_partone、filenameone_parttwo、filenametwo的长度不一致,固定切前10位会生成错误的文件夹名
  • 未过滤待处理文件夹内的已有子目录,遍历过程中可能误将已生成的目标文件夹作为待处理文件处理
  • 冗余的分支逻辑:原代码中文件夹存在/不存在两个分支都执行相同的复制操作,属于无效代码

核心适配逻辑

  • 替换固定切片规则:识别文件名末尾的下划线+数字格式的序号后缀,移除后缀后剩余的公共部分即为目标文件夹名,可自动适配本次需求的三类分组特征
  • 增加目录过滤逻辑:遍历待处理目录时仅处理普通文件,跳过子目录
  • 简化代码分支:移除冗余判断,文件夹不存在时自动创建,再执行文件迁移操作

修复后完整代码

import os
import shutil

# 替换为实际的工作目录绝对路径
WORK_PATH = "<abs path to desktop>"
SOURCE_FOLDER = os.path.join(WORK_PATH, "folder")

os.chdir(WORK_PATH)
for file_name in os.listdir(SOURCE_FOLDER):
    file_full_path = os.path.join(SOURCE_FOLDER, file_name)
    # 跳过目录,仅处理文件
    if not os.path.isfile(file_full_path):
        continue

    # 按最后一个下划线拆分文件名,提取分组前缀
    split_result = file_name.rsplit("_", 1)
    # 若末尾部分为纯数字,取前缀作为文件夹名,否则用完整文件名
    if len(split_result) == 2 and split_result[1].isdigit():
        target_folder = split_result[0]
    else:
        target_folder = file_name

    # 自动创建目标文件夹
    if not os.path.exists(target_folder):
        os.mkdir(target_folder)
    
    # 迁移文件(如需保留原文件可将move替换为copy)
    shutil.move(file_full_path, os.path.join(target_folder, file_name))

适配效果验证

针对给出的7个测试文件,自动生成的目标文件夹及对应归集文件如下:

  • filenameone_partone:归集原序号1-3的3个文件
  • filenameone_parttwo:归集原序号4-5的2个文件
  • filenametwo:归集原序号6-7的2个文件

完全匹配需求的分类规则。

注:如果需要保留源文件夹内的原文件,仅需将代码中的shutil.move替换为shutil.copy即可。

内容的提问来源于stack exchange,提问作者Ohm Dios

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 01:06:03