我觉得我无法看到更大的画面;但基本上我不知道为什么你要使用os.path.join
而不是普通字符串连接?
我主要使用VBScript,所以我不明白这个函数的意义。
只需编写一次文件路径操作代码,即可在多个不同平台上免费使用。定界字符已被抽象化,使您的工作更加轻松。
您无需再担心该目录路径是否带有末尾斜杠。如果需要,os.path.join
将自动添加它。
使用os.path.join
可以让其他人阅读您的代码时更容易发现您正在处理的是文件路径。人们可以快速扫描代码并发现其内在特性是文件路径。如果您决定自己构造路径,则可能会分散读者的注意力而无法找到实际的问题:“嗯,一些字符串连接和替换。这是文件路径还是什么?糟糕!为什么他没有使用os.path.join
?” :)
os.path.join
,但如果您使用,请出于正确的原因使用它。围绕 os.path.join 存在很多盲目模仿。正如人们所说,“愚蠢的一致性是小心灵的妖怪”。 - hrabanpath + '/' + file
。这种方法易于阅读,并且在所有操作系统上都可以使用。使用 os.path.join
是有风险的,因为它不一致。例如,os.path.join('/foo/bar','test')
在某些系统上会返回 /foo/bar/test
,而在其他系统上会返回 /foo/bar\\test
。 - John Henckelos.path.join('a', '/b')
,它实际上返回 /b
。因此,如果您混合使用这些方法,或者从字符串连接转换为 os.path.join
,请确保路径组件没有意外地具有前导斜杠。 - ketil该代码可在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,但是在'\ '上应该有相同的内容。
/
在 CPython 中可以正常工作。 - Eric O. Lebigotos.path.join('/home', 'tadeck')
)和绝对路径(例如os.path.join('/home', '/usr')
)之间使用相同的代码。 - Tadeck它是独立于操作系统的。如果你硬编码路径为C:\Whatever,那么它们只会在Windows上工作。如果你用Unix标准的“/”硬编码它们,那么它们只会在Unix上工作。os.path.join可以检测运行的操作系统,并使用正确的符号连接路径。