为什么不使用os.path.join os.path.sep或os.sep?

2024-05-22 18:51:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我们知道,windows同时接受"\""/"作为分隔符。 但在python中,使用"\"。例如,调用os.path.join("foo","bar"),将返回'foo\\bar'。令人恼火的是有一个转义字符,所以不能只复制路径字符串并粘贴到资源管理器的位置栏。

我想知道有没有办法让python使用"/"作为默认分隔符,我已经尝试将os.path.sep和os.sep的值更改为"/",但是os.path.join仍然使用"\\"

什么是正确的方法?

附言:

我只是不明白为什么python在windows上使用“\”作为默认分隔符,也许旧版本的windows不支持“/”?


Tags: path方法字符串路径fooos粘贴windows
3条回答

为什么不定义自定义显示函数?

例如

def display_path(path):
    return path.replace("\\", "/")

如果你想用str.join代替os.path.join,你可以这样做(str.join需要一个列表,os.path.join需要*args):

join = lambda *args: "/".join(args)

最好是让Python规范化所有内容,然后替换,例如:

join = lambda *args: os.path.join(*args).replace("\\", "/")

当文件路径中有空格时,上面的问题可能只出现在posix上。

然后,可以在utils文件的顶部放置一个if语句,并将display_pathjoin分别定义为no op和os.path.join(如果不在Windows上)。

这完全是关于Python如何检测您的操作系统:

# in os.py
if 'posix' in _names:
    ...
    import posixpath as path   

elif 'nt' in _names:
    ...
    import ntpath as path

因此,在Windows上加载ntpath模块。如果您检查ntpath.pyposixpath.py模块,您会注意到ntpath.join()有点复杂,这也是您提到的原因:Windows将/理解为路径分隔符。

底线:虽然可以在Windows中使用posixpath.join()(只要参数是POSIX格式),但我不建议这样做。

要尽可能简单地回答您的问题,只需使用posixpath而不是os.path。

所以不是:

from os.path import join
join('foo', 'bar')
# will give you either 'foo/bar' or 'foo\\bar' depending on your OS

使用:

from posixpath import join
join('foo', 'bar')
# will always give you 'foo/bar'

相关问题 更多 >

    热门问题