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

Nic*_*las 4 python operating-system

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

import os
os.sep = '/'
print(os.sep)
print(os.path.join('.', 'path'))
Run Code Online (Sandbox Code Playgroud)

ƘɌỈ*_*ƬƠƑ 6

我认为回答了为什么 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
Run Code Online (Sandbox Code Playgroud)

请确保您使用pure的版本PosixPathWindowsPath。如果您尝试WindowsPath在 Posix 系统上使用,您将收到以下错误:

NotImplementedError: cannot instantiate 'WindowsPath' on your system
Run Code Online (Sandbox Code Playgroud)

这也在文档中指定:

如果您想在 Unix 机器上操作 Windows 路径(反之亦然)。WindowsPath在 Unix 上运行时不能实例化 a ,但可以实例化PureWindowsPath.


zon*_*ndo 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
Run Code Online (Sandbox Code Playgroud)

可以看到它是直接放入函数中的。它不依赖于os.sep. 每个 Python 安装都包含os.path适用于每个操作系统的功能。它们位于 Python 目录中的macpath.pyntpath.py和下posixpath.py。如果您查看每个模块,您会发现该posixpath模块具有您想要的内容:

import posixpath

print(posixpath.join('.', 'path'))
Run Code Online (Sandbox Code Playgroud)