为什么在字符串连接中使用os.path.join?

use*_*410 64 python filepath

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

我主要使用VBScript,所以我不明白这个功能的意义.

小智 69

手提

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

聪明

您不再需要担心该目录路径是否有尾部斜杠.os.path.join如果需要,将添加它.

明确

使用os.path.join对于阅读代码的其他人来说,使用文件路径是很明显的.人们可以快速扫描代码并发现它本质上是一个文件路径.如果你决定自己构建它,你可能会让读者不要发现代码的实际问题:"嗯,一些字符串concats,一个替换.这是一个文件路径还是什么?Gah!他为什么不使用os.path.join?" :)

  • 谢谢.智能和清晰部分正是我在向自己提出同样问题时所寻求的那种推理:便携式部分很容易通过连接"/"而不是仅使用""来实现,因此它有点没有实际意义. (3认同)
  • 第3点有优点,但1和2都没有实际意义./适用于Windows.您使用的操作系统不支持它?OS/FS为您规范了双尾随斜杠.我不是说不要使用`os.path.join`,但如果你这样做,那就是出于正确的原因.os.path.join周围有很多货物结果.正如他们所说,"愚蠢的一致性是小脑袋的大人物". (2认同)
  • 如果您只是将路径连接到文件,则应该使用“path + '/' + file”。这是立即可读的*并且*可移植到所有操作系统。使用 os.path.join 是危险的,因为它不一致。例如,`os.path.join('/foo/bar','test')`将在某些系统上返回`/foo/bar/test`,而在其他系统上返回`/foo/bar\\test`。 (2认同)
  • 然而它们并不完全等同。考虑 `os.path.join('a', '/b')`,它实际上返回 `/b`。因此,如果您混合使用这些方法,或者从字符串连接转换为“os.path.join”,请确保路径组件不会意外地带有前导斜杠。 (2认同)

loc*_*jay 5

将在带有'\'的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
Run Code Online (Sandbox Code Playgroud)

没有窗户,但同样应该有'\'

  • 奇怪的是,使用`/`适用于Windows,使用CPython ... (5认同)