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
相关产品推荐
相关产品推荐

