为啥在字符串连接上使用 os.path.join?

Posted

技术标签:

【中文标题】为啥在字符串连接上使用 os.path.join?【英文标题】:Why use os.path.join over string concatenation?为什么在字符串连接上使用 os.path.join? 【发布时间】:2012-12-06 07:59:42 【问题描述】:

我认为我无法在这里看到更大的图景;但基本上我不知道你为什么要使用os.path.join 而不是普通的字符串连接?

我主要使用VBScript,所以我不明白这个函数的意义。

【问题讨论】:

另外,why you may want to use pathlib over os.path 现在 【参考方案1】:

可以在带有 '\' 的 Windows 和带有 '/' 的 Unix(包括 Mac OS X)上工作。

对于 posixpath,这里是简单的代码

In [22]: os.path.join??
Type:       function
String Form:<function join at 0x107c28ed8>
File:       /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py
Definition: os.path.join(a, *p)
Source:
def join(a, *p):
    """Join two or more pathname components, inserting '/' as needed.
    If any component is an absolute path, all previous path components
    will be discarded."""
    path = a
    for b in p:
        if b.startswith('/'):
            path = b
        elif path == '' or path.endswith('/'):
            path +=  b
        else:
            path += '/' + b
    return path

没有windows,但应该有'\'

【讨论】:

奇怪的是,在 Windows 上使用 / 可以使用 CPython…… 这个。当有专门为您设计的功能时,您为什么要尝试自己处理路径分隔符等? 我阅读了 cmets 并将路径连接在一起,我只是不明白为什么我会使用它,抱歉,就像我说的那样,我显然没有看到更大的图景。 @user1905410 它的作用远不止于此,正如精细文档所涵盖的那样。 @user1905410 它的作用远不止于此,正如精细文档所涵盖的那样。【参考方案2】:

它独立于操作系统。如果您将路径硬编码为 C:\Whatever,它们将仅适用于 Windows。如果您使用 Unix 标准“/”对它们进行硬编码,它们将仅适用于 Unix。 os.path.join 检测它运行的操作系统并使用正确的符号连接路径。

【讨论】:

If you hardcode them with the Unix standard "/" they will only work on Unix. 这是错误的。 "/" 在 windows 和 linux/unix/bsd/darwin 上工作得很好。【参考方案3】:

便携

编写文件路径操作一次,它可以在许多不同的平台上免费使用。分隔符被抽象掉,让您的工作更轻松。

智能

您不再需要担心该目录路径是否包含trailing slash or not。 os.path.join 会根据需要添加。

清除

使用os.path.join 可以让其他阅读您的代码的人清楚您正在使用文件路径。人们可以快速浏览代码并发现它本质上是一个文件路径。如果您决定自己构建它,您可能会分散读者发现代码实际问题的注意力:“嗯,一些字符串连接,一个替换。这是文件路径还是什么?哎呀!他为什么不使用os.path.join ?” :)

【讨论】:

谢谢。 Smart 和 Clear 部分正是我在向自己提出同样的问题时所寻找的那种推理:便携式部分很容易通过与“/”而不是仅 Windows 的“\”连接来实现,所以它有点没有实际意义。 第 3 点有优点,但第 1 点和第 2 点没有实际意义。 / 适用于 Windows。您曾经使用过什么操作系统不支持它?并且双斜杠由 OS/FS 为您标准化。我不是说不要使用os.path.join,但如果你这样做,请出于正确的理由这样做。 os.path.join 周围有很多货物崇拜。正如他们所说,“愚蠢的一致性是小人的妖精”。 如果代码只针对一个特定的操作系统,那么使用os.path.join是没有意义的。 计算速度怎么样? 非常有用。我最近也被这个问题弄糊涂了。

以上是关于为啥在字符串连接上使用 os.path.join?的主要内容,如果未能解决你的问题,请参考以下文章

python中使用os.path.join()

os.path.join 的用法

Python中join函数和os.path.join用法

Python join() 方法与os.path.join()的区别

Python-路径拼接os.path.join()函数

Python基本知识 os.path.join与split() 函数