在Python中,如何在os.path.join()函数中指定目录分隔符?

时间:2016-07-31 02:09:33

标签: python operating-system

我尝试了如下代码,尝试更改目录分隔符以转发斜杠/,但仍然停留在反斜杠\中。文档说该函数使用目录分隔符os.sep连接路径,但这在我的情况下不起作用。

import os
os.sep = '/'
print(os.sep)
print(os.path.join('.', 'path'))

3 个答案:

答案 0 :(得分:3)

我认为this回答了Python使用特定分隔符的问题。

也就是说,您可以使用Pathlib模块构建路径并指定是否需要Posix或Windows路径。

示例:

from pathlib import PurePosixPath, PureWindowsPath

print(PurePosixPath('some', 'silly', 'long', 'path'))
>> some/silly/long/path

print(PureWindowsPath('some', 'silly', 'long', 'path'))
>> some\silly\long\path

确保使用purePosixPathWindowsPath。如果您尝试在Posix系统上使用WindowsPath,则会收到以下错误:

NotImplementedError: cannot instantiate 'WindowsPath' on your system

这也在docs

中指定
  

如果要在Unix计算机上操作Windows路径(反之亦然)。在Unix上运行时无法实例化WindowsPath,但可以实例化PureWindowsPath

答案 1 :(得分:1)

您可以查看不同操作系统的源代码。例如,Mac版本是:

def join(s, *p):
    path = s 
    for t in p:
        if (not s) or isabs(t):
            path = t 
            continue
        if t[:1] == ':':
            t = t[1:]
        if ':' not in path:
            path = ':' + path
        if path[-1:] != ':':
            path = path + ':' 
        path = path + t 
    return path

您可以看到它直接放在函数中。它不依赖os.sep。每个Python安装包括每个操作系统的os.path函数。它们位于macpath.pyntpath.pyposixpath.py下的Python目录中。如果你看一下,你会注意到posixpath模块有你想要的东西:

import posixpath

print(posixpath.join('.', 'path'))

答案 2 :(得分:0)

你可以用自己的方式替换os.path中的函数:

import os
path = "public\\INSTALL\\"
print("Initial unmodified join return: '%s'" % os.path.join('.', path) )
native_os_path_join = os.path.join
def modified_join(*args, **kwargs):
    return native_os_path_join(*args, **kwargs).replace('\\', '/')
os.path.join = modified_join
print("Modified join return: '%s'" % os.path.join('.', path) )

输出:

Initial unmodified join return: '.\public\INSTALL\'
Modified join return: './public/INSTALL/'