提问人:user1905410 提问时间:12/19/2012 最后编辑:cs95user1905410 更新时间:10/26/2017 访问量:28219
为什么要使用 os.path.join 而不是字符串串联?
Why use os.path.join over string concatenation?
问:
我认为,我无法在这里看到更大的图景;但基本上我不知道你为什么要使用而不是普通的字符串串联?os.path.join
我主要使用 VBScript,所以我不明白这个函数的意义。
答:
5赞
jassinm
12/19/2012
#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
没有窗口,但“\”也应该有
评论
7赞
Eric O. Lebigot
12/19/2012
然而,奇怪的是,在 Windows 上使用作品,使用 CPython....../
1赞
Blair
12/19/2012
这。当有一个功能可以为您设计时,您为什么要尝试自己处理路径分隔符等?
1赞
user1905410
12/19/2012
我阅读了评论,它将路径连接在一起,我只是不明白为什么我会使用它,很抱歉,就像我说的那样,我显然没有看到更大的图景。
0赞
12/19/2012
@user1905410 正如 Fine Documentation 所涵盖的那样,它的作用远不止于此。
0赞
12/19/2012
@user1905410 正如《精细文档》所涵盖的那样,它的作用远不止于此。
-2赞
bkaiser
12/19/2012
#2
它与操作系统无关。如果将路径硬编码为 C:\Anything,它们将只能在 Windows 上运行。如果你用 Unix 标准“/”对它们进行硬编码,它们只能在 Unix 上运行。os.path.join 检测运行它的操作系统,并使用正确的符号联接路径。
评论
13赞
Léo Germond
7/2/2016
If you hardcode them with the Unix standard "/" they will only work on Unix.
这是错误的。“/”在 Windows 和 linux/unix/bsd/darwin 上运行良好。
116赞
user1902824
12/19/2012
#3
便携式
编写一次文件路径操作,它可以在许多不同的平台上免费运行。分隔字符被抽象掉,使您的工作更轻松。
聪明
您不再需要担心该目录路径是否有尾部斜杠。 如果需要,将添加它。os.path.join
清楚
使用可以使阅读您的代码的其他人清楚地知道您正在使用文件路径。人们可以快速浏览代码,发现它本质上是一个文件路径。如果你决定自己构建它,你可能会分散读者的注意力,使他们无法发现你的代码的实际问题:“嗯,一些字符串连接,一个替换。这是文件路径还是什么?嘎!他为什么不用? :)os.path.join
os.path.join
评论
4赞
Léo Germond
7/2/2016
谢谢。Smart 和 Clear 部分正是我在向自己提出同样问题时所寻找的那种推理:可移植部分很容易通过与“/”而不是仅限 Windows 的“\”连接来实现,因此它有点没意义。
7赞
hraban
5/3/2017
第 3 点有道理,但第 1 点和第 2 点没有实际意义。/ 适用于 Windows。您曾经使用过什么不支持它的操作系统?OS/FS 会为您规范化双尾斜杠。我并不是说不要使用 ,但如果你这样做,请出于正确的理由去做。os.path.join 周围有很多 cargo-culting。正如他们所说,“愚蠢的一致性是小头脑的妖精”。os.path.join
1赞
haneulkim
5/13/2021
在计算速度方面呢?
2赞
John Henckel
3/2/2022
如果只是将路径联接到文件,则应使用 .这是可读的,并且可移植到所有操作系统。 使用是危险的,因为它不一致。例如,将在某些系统和其他系统上返回。path + '/' + file
os.path.join
os.path.join('/foo/bar','test')
/foo/bar/test
/foo/bar\\test
2赞
ketil
3/24/2023
然而,它们并不完全等同。考虑 ,它实际上返回 。因此,如果要混合这些方法,或者从字符串连接转换为 ,请确保路径组件不会意外地具有前导斜杠。os.path.join('a', '/b')
/b
os.path.join
下一个:连接数值向量的数字
评论