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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 13:16:05