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

Python使用re库生成不重复文件夹副本名称的实现方法

生成不重复的文件夹副本名称(Python实现)

在Python中,我们可以借助re库生成新的文件夹名称,当想要创建的文件夹名称已存在时,该方法会返回一个不重复的新名称,常见的命名规则示例如下:

  • 原名称:New Folder_Copy2 → 新名称:New Folder_Copy3
  • 原名称:New Folder_Copy → 新名称:New Folder_Copy 1
  • 原名称:New Folder_Copy 1 → 新名称:New Folder_Copy 2
  • 支持copy1、copy2这类带数字后缀的命名规则

实现代码

import re

def get_new_copy_name(name, exists_name_list, post_fix):
    """
    生成不重复的副本名称
    参数:
        name: 想要创建副本的原始名称
        exists_name_list: 已存在的文件夹名称列表
        post_fix: 副本后缀(如"_Copy")
    """
    tmp_num = 0
    # 筛选出与原始名称前缀匹配的已存在名称
    prefix = name.split(post_fix)[0]
    exists_name_list = [e_n_l for e_n_l in exists_name_list if prefix in e_n_l]
    if len(exists_name_list) == 0:
        exists_name_list = [name]

    for e_n_l in exists_name_list:
        # 正则匹配后缀及数字编号
        regex = re.compile(rf"(?i){post_fix} ?(([0-9]+)?)$")
        match_result = regex.search(e_n_l)

        if match_result is not None:
            last_str = match_result.group()
            num = match_result.groups()[0]
            if num == "":
                num = 1
            else:
                num = int(num) + 1
        else:
            last_str = ""
            num = 0
        
        if tmp_num < num:
            tmp_num = num
        
    # 处理编号为空的情况
    tmp_num = str(tmp_num) if tmp_num != 0 else ""
    # 生成新名称
    new_name = f"{e_n_l.replace(last_str, '')}{post_fix}{tmp_num}"
    return new_name

# 测试示例
post_fix = "_Copy"
name = "Exp123_Copy(9)"
exists_name_list = [
    "Exp123_Copy20",
    "Exp123_Copy3",
    "Exp123_Copy19",
    "Exp123_Copy6",
    "Exp345",
    "Exp123",
    "Exp123_Copy1005",
    "Exp123_Copy6",
    "Exp345_Copy60",
]
print(get_new_copy_name(name, exists_name_list, post_fix))

输出结果: Exp123_Copy1006

内容的提问来源于stack exchange,提问作者Atul Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:55:31