Python函数生成唯一文件夹名不符合预期的问题排查
问题:生成唯一文件夹名函数不符合预期
我想要实现一个函数,传入文件夹名称列表时,若该名称未被使用过则保留原名;若已存在,就在末尾添加_1生成唯一文件夹名。但当前函数运行结果不符合预期,相关代码及输出情况如下:
原代码
folder_dict = {} def get_unique_folder_name(name): if name not in folder_dict: folder_dict[name] = name else: folder_dict[name] += '_1' return folder_dict[name] items = [ 'Home_J5', 'Home_J5', 'Home_J5', 'Home_J5_1', 'Home_J5_1_1', ] for item in items: print(get_unique_folder_name(item))
当前输出
Home_J5 Home_J5_1 Home_J5_1_1 Home_J5_1 Home_J5_1_1
预期输出
Home_J5 Home_J5_1 Home_J5_1_1 Home_J5_1_1_1 Home_J5_1_1_1_1
问题原因
原代码逻辑错误在于:用输入的原始名称作为folder_dict的键来跟踪修改,而非跟踪所有已生成的唯一文件夹名。这会导致不同的原始输入(比如Home_J5_1)无法感知之前已生成的同名文件夹,直接返回重复名称。
修正后的代码
# 用集合存储所有已生成的唯一文件夹名,查询效率更高 used_folders = set() def get_unique_folder_name(name): current_name = name # 循环生成新名称,直到找到未被使用过的 while current_name in used_folders: current_name += '_1' # 将新名称标记为已使用 used_folders.add(current_name) return current_name items = [ 'Home_J5', 'Home_J5', 'Home_J5', 'Home_J5_1', 'Home_J5_1_1', ] for item in items: print(get_unique_folder_name(item))
说明
- 使用集合
used_folders存储所有已生成的文件夹名,集合的成员查询操作效率远高于字典; - 对于每个输入名称,从原始名称开始,不断在末尾追加
_1,直到找到一个未在集合中出现过的名称; - 找到唯一名称后,将其加入集合,确保后续不会重复生成。
内容的提问来源于stack exchange,提问作者robots.txt
相关产品推荐
相关产品推荐

