Python 为什么使用os.path.join而不是字符串连接?

Python 为什么使用os.path.join而不是字符串连接?,python,filepath,Python,Filepath,我想我看不到这里的大局;但基本上我不知道为什么要使用os.path.join而不是普通的字符串连接 我主要使用VBScript,因此我不理解此函数的意义。将在Windows上使用“\”和Unix(包括Mac OS X)上使用“/” 对于posixpath,下面是简单的代码 In [22]: os.path.join?? Type: function String Form:<function join at 0x107c28ed8> File: /usr/lo

我想我看不到这里的大局;但基本上我不知道为什么要使用
os.path.join
而不是普通的字符串连接


我主要使用VBScript,因此我不理解此函数的意义。

将在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
[22]中的
:os.path.join??
类型:功能
字符串形式:
文件:/usr/local/ceral/python/2.7.3/Frameworks/python.framework/Versions/2.7/lib/python2.7/posixpath.py
定义:os.path.join(a,*p)
资料来源:
def连接(a,*p):
“”“连接两个或多个路径名组件,根据需要插入“/”。
如果任何组件是绝对路径,则所有以前的路径组件
将被丢弃
路径=a
对于p中的b:
如果b.startswith('/'):
路径=b
elif path==''或path.endswith('/'):
路径+=b
其他:
路径+='/'+b
返回路径

没有windows,但“\”也应该有windows,它是独立于操作系统的。如果您将路径硬编码为C:\which,则它们只能在Windows上工作。如果使用Unix标准“/”对其进行硬编码,则它们只能在Unix上工作。os.path.join检测其运行的操作系统,并使用正确的符号连接路径。

只需编写一次文件路径操作,它就可以在许多不同的平台上免费工作。分隔字符被抽象掉,使您的工作更容易

聪明的 您不再需要担心该目录路径是否有错误
os.path.join
将在需要时添加它

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

奇怪的是,使用
/
可以在Windows上工作,而使用CPython…这一点。当有专门为您设计的函数时,您为什么要尝试自己处理路径分隔符等?我阅读了注释,它将路径连接在一起,我不明白为什么要使用它,抱歉,就像我说的,我显然看不到更大的图景。@user1905410它做的不止这些,正如优秀的文档所涵盖的那样。@user1905410它做的不止这些,正如优秀的文档所涵盖的那样。谢谢。智能和清晰的部分正是我在问自己同样的问题时所寻找的推理:便携部分很容易通过与“/”而不是仅windows“\”连接来实现,因此这是一种模拟。第3点有优点,但第1点和第2点是模拟的在Windows上工作。你使用过哪些不支持它的操作系统?OS/FS为您标准化了双尾随斜杠。我并不是说不要使用
os.path.join
,但如果你这样做了,那就要有正确的理由。在os.path.join周围有很多货物。正如他们所说,“愚蠢的一致性是小头脑的妖怪”。如果代码只针对一个特定的操作系统,那么使用
OS.path.join
是没有意义的。在计算速度方面呢?
如果你用Unix标准对它们进行硬编码“/”它们将只在Unix上工作。
这是错误的。“/”在windows和linux/unix/bsd/darwin上运行良好