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


Answers:


80

随身携带

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

聪明

您不再需要担心该目录路径是否带有斜杠os.path.join会在需要时添加它。

明确

使用os.path.join使其他人很明显地看到您正在使用文件路径的代码。人们可以快速浏览代码,并从本质上发现它是文件路径。如果您决定自己构建它,则可能使读者无法发现代码的实际问题:“嗯,一些字符串连接,一个替换。这是文件路径还是什么?Gah!他为什么不使用os.path.join?” :)


3
谢谢。当我对自己问同样的问题时,智能和清除部分正是我要寻找的一种推理:通过用“ /”(而不是仅用于Windows的“ \”)连接可以轻松获得可移植部分,因此有点不合理。
莱奥Germond

3
点3有优点,而点1和2没有意义。/适用于Windows。您所使用的什么操作系统不支持它?OS / FS会为您规范双尾斜杠。我并不是说不要使用os.path.join,但是如果您这样做了,则出于正确的原因。os.path.join周围有很多货物培训活动。他们说:“愚蠢的一致性是小头脑的妖精。”
hraban

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

没有窗户,但也应该有'\'


5
不过,足够奇怪的是,/在Windows上使用CPython的作品…
Eric O Lebigot 2012年

1
这个。当有一个专门为您设计的功能时,为什么还要自己尝试处理路径分隔符等呢?
布莱尔

1
我阅读了评论并将其连接在一起,我只是看不出我为什么会使用它,如我所说的道歉,我显然没有看到更大的前景。
user1905410

@ user1905410可以完成更多工作,如Fine Documentation所述。

@ user1905410可以完成更多工作,如Fine Documentation所述。

0

它与操作系统无关。如果您将路径硬编码为C:\,则无论哪种方式都只能在Windows上使用。如果使用Unix标准“ /”对它们进行硬编码,则它们仅可在Unix上使用。os.path.join可以检测正在其下运行的操作系统,并使用正确的符号来加入路径。


7
If you hardcode them with the Unix standard "/" they will only work on Unix.那是错的。“ /”在Windows AND linux / unix / bsd / darwin上正常工作。
莱奥Germond
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.