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

如何拼接基础路径与当前目录开头的路径并消除冗余的./符号

路径拼接冗余./消除方案

问题核心

拼接路径时产生的./属于路径冗余段,直接调用路径规范化方法即可自动消除,同时还能兼容处理../等相对路径跳转场景,避免后续逻辑出错。

方案1:基于os.path实现(兼容现有代码写法)

直接在拼接完成后调用os.path.normpath()或者os.path.abspath()做路径规范化即可,仅需修改dfname生成行:

def get_files(self):
        cur_path = Path().resolve()
        print("cur_path:", cur_path)
        for dirpath, dirnames, filenames in os.walk("."):
            for filename in [f for f in filenames if "scored_" in f]:
                # 新增os.path.normpath做路径规范化
                dfname = os.path.normpath(os.path.join(cur_path, dirpath, filename))
                tag = dfname.replace("/","_")
                print("dfname:", dfname)
                self.dflist[tag.strip()] = dfname.strip()

os.path.normpath会自动折叠路径中的冗余分隔符、./标识,同时处理../层级跳转,不会改变路径的实际指向。

方案2:全pathlib实现(更简洁,推荐)

你已经引入了Path类,完全可以统一使用pathlib的语法,避免混用os.path,写法更直观易维护:

def get_files(self):
    cur_path = Path().resolve()
    print("cur_path:", cur_path)
    for dirpath, dirnames, filenames in os.walk("."):
        for filename in [f for f in filenames if "scored_" in f]:
            # 直接用Path的/运算符拼接,调用resolve()自动规范化为标准绝对路径
            dfname = (cur_path / dirpath / filename).resolve()
            dfname_str = str(dfname)
            tag = dfname_str.replace("/","_")
            print("dfname:", dfname_str)
            self.dflist[tag.strip()] = dfname_str.strip()

Path.resolve()默认会处理所有相对路径段、冗余标识,输出的是标准格式的绝对路径,完全匹配需求。

额外说明

两种方案都可以同时避免后续生成tag时出现_._这类冗余片段,不需要额外修改tag生成逻辑。

内容的提问来源于stack exchange,提问作者Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:15:03