如何修改get_unique_path函数以支持含括号数字后缀的文件路径
解决方法
当前代码的核心问题是未识别文件名中已有的括号数字后缀,导致重复追加括号;同时没有优先尝试无数字后缀的原始路径。以下是修正后的实现:
import os import re from typing import Optional def get_unique_path(file_path: str) -> Optional[str]: # 拆分文件名与扩展名 base, ext = os.path.splitext(file_path) # 匹配结尾的括号数字后缀,例如"example(1)"会提取出基础名"example"和数字"1" match = re.match(r'(.*?)\((\d+)\)$', base) if match: real_base = match.group(1) current_num = int(match.group(2)) else: real_base = base current_num = 0 # 第一步:优先尝试无数字后缀的原始路径 original_path = f"{real_base}{ext}" if not os.path.exists(original_path): return original_path # 第二步:从当前数字的下一个值开始生成递增路径 attempt = current_num + 1 while True: new_path = f"{real_base}({attempt}){ext}" if not os.path.exists(new_path): return new_path attempt += 1
逻辑说明
- 解析已有后缀:通过正则表达式
(.*?)\((\d+)\)$识别文件名结尾的括号数字,拆分出真正的基础名称与当前数字(如example(1)会拆分为example和1) - 优先原始路径:无论输入路径是否带数字后缀,先检查无数字的原始路径是否可用,可用则直接返回
- 递增生成路径:若原始路径已存在,从当前数字的下一个值开始生成新路径,避免重复追加括号(例如输入
example(1).txt时,会直接尝试example(2).txt而非example(1)(2).txt)
测试示例
- 输入
example(1).txt:若example.txt不存在则返回它;若存在则返回第一个未被占用的example(n).txt(如example(2).txt) - 输入
test.txt:若test.txt不存在则返回它;若存在则依次尝试test(1).txt、test(2).txt等
内容的提问来源于stack exchange,提问作者ImportanceLow7312
相关产品推荐
相关产品推荐

