如何拼接基础路径与当前目录开头的路径并消除冗余的./符号
路径拼接冗余./消除方案
问题核心
拼接路径时产生的./属于路径冗余段,直接调用路径规范化方法即可自动消除,同时还能兼容处理../等相对路径跳转场景,避免后续逻辑出错。
方案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
相关产品推荐
相关产品推荐

