Python函数返回字符串末尾反斜杠丢失问题求助
Win32系统下日志路径末尾反斜杠丢失问题
我开发一个复杂程序时需要添加日志功能,单独写了一个文件用来快速创建日志记录器,但在Win32系统下获取日志文件夹绝对路径时,返回的路径字符串末尾反斜杠总是丢失。系统检测功能正常,就是路径处理有问题。
原代码如下:
def __get_logging_path(log_folder): if sys.platform == 'win32': return os.path.abspath(os.path.join(os.path.dirname(__file__)) + f'\{log_folder}\') elif sys.platform == 'linux': return os.path.abspath(os.path.join(os.path.dirname(__file__) + f'/{log_folder}/')) else: raise OSError(f'Untested OS: {sys.platform}')
我尝试过以下几种写法替换Win32分支的代码,都没解决问题:
return os.path.abspath(os.path.join(os.path.dirname(__file__)) + '\' + log_folder + '\') return os.path.abspath(os.path.join(os.path.dirname(__file__)) + r'\' + log_folder + r'\') return os.path.abspath(os.path.join(os.path.dirname(__file__)) + f'\{log_folder}' + r'\')
问题根源与解决方案
问题1:os.path.abspath会规范化路径,自动移除末尾分隔符
os.path.abspath的作用是返回规范化的绝对路径,它会自动去掉路径末尾的斜杠/反斜杠,这是你无论怎么手动拼接都留不住末尾分隔符的核心原因。
问题2:手动拼接路径容易出错且不跨平台
Win32下用\时,普通字符串里的\是转义字符,比如f'\{log_folder}\'里的\{会被解析成转义的{,导致格式化字符串出错;就算用原始字符串r'\',手动拼接也不如os.path.join可靠,后者会自动根据当前系统选择对应的路径分隔符,根本不需要分系统判断。
正确写法
直接用os.path.join处理路径,要保留末尾分隔符的话,给join多传一个空字符串参数,最后再转成绝对路径:
import os import sys def __get_logging_path(log_folder): base_dir = os.path.dirname(__file__) # 最后传入空字符串,让os.path.join自动添加末尾路径分隔符 log_path = os.path.join(base_dir, log_folder, '') return os.path.abspath(log_path)
这样写既不需要区分Win32和Linux,os.path.join会自动适配系统分隔符,同时通过传入空字符串确保路径末尾保留分隔符,os.path.abspath也不会移除它(因为join生成的带末尾分隔符的路径经过abspath规范化后依然会保留)。
内容的提问来源于stack exchange,提问作者Sol3N
相关产品推荐
相关产品推荐

