为什么使用 os.path. join 而不使用字符串串联?

我不能在这里看到更大的图片,我认为,但基本上我不知道为什么你会使用 os.path.join而不是只是普通的字符串串联?

我主要使用 VBScript,所以我不明白这个函数的意义。

23857 次浏览

Will work on Windows with '\' and Unix (including Mac OS X) with '/'.

for posixpath here's the straightforward code

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

don't have windows but the same should be there with '\'

It is OS-independent. If you hardcode your paths as C:\Whatever they will only work on Windows. If you hardcode them with the Unix standard "/" they will only work on Unix. os.path.join detects the operating system it is running under and joins the paths using the correct symbol.

Portable

Write filepath manipulations once and it works across many different platforms, for free. The delimiting character is abstracted away, making your job easier.

Smart

You no longer need to worry if that directory path had a trailing slash or not. os.path.join will add it if it needs to.

Clear

Using os.path.join makes it obvious to other people reading your code that you are working with filepaths. People can quickly scan through the code and discover it's a filepath intrinsically. If you decide to construct it yourself, you will likely detract the reader from finding actual problems with your code: "Hmm, some string concats, a substitution. Is this a filepath or what? Gah! Why didn't he use os.path.join?" :)