如何实现文件名唯一性校验并在重复时添加整数后缀(保留扩展名)
解决文件名重复时正确添加整数后缀的问题
我懂你遇到的这个小麻烦——现在代码把序号硬生生贴在了扩展名后面,导致变成了airco.jpg_1,但你想要的是把序号插在主文件名和扩展名中间,也就是airco_1.jpg对吧?其实核心就是把文件名拆成主名称和扩展名两部分,再把序号加在中间就行。
关键思路:正确拆分文件名
要避免把序号加在扩展名后面,你需要从文件名的最后一个点处拆分:
- 如果文件名有扩展名(比如
airco.jpg、report.tar.gz),拆分后主名称是最后一个点前面的部分,扩展名是最后一个点及后面的内容 - 如果文件名没有扩展名(比如
readme),就直接把序号加在文件名末尾
代码示例(以Python为例)
下面是一个实现这个逻辑的函数,你可以参考:
def get_unique_filename(existing_files, input_name): # 从右侧拆分主名称和扩展名(处理多扩展名的情况,比如file.tar.gz) if '.' in input_name: main_name, ext = input_name.rsplit('.', 1) ext = f'.{ext}' # 保留扩展名的点 else: main_name = input_name ext = '' counter = 1 current_name = input_name # 循环检查文件名是否已存在,直到找到唯一的 while current_name in existing_files: current_name = f"{main_name}_{counter}{ext}" counter += 1 return current_name
测试一下效果
假设你的数据库里已有的文件名列表是["airco.jpg"]:
- 第一次调用
get_unique_filename(existing_files, "airco.jpg"),会返回airco_1.jpg - 把这个新文件名加入列表后,第二次调用会返回
airco_2.jpg - 如果输入的是无扩展名的文件,比如
"notes",重复调用会依次返回notes_1、notes_2
这个逻辑还能处理带多个扩展名的文件,比如输入"data.tar.gz",重复时会生成data.tar_1.gz,符合我们的预期。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

