为啥在字符串连接上使用 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?的主要内容,如果未能解决你的问题,请参考以下文章