就像你说的,os.path.join连接基于当前操作系统的路径。posixpath是在名称空间os.path下的posix系统上使用的底层模块:>>> os.path.join is posixpath.join
True
>>> posixpath.join('/media/', 'js/foo.js')
'/media/js/foo.js'
因此,您可以导入并使用posixpath.join代替url,url是可用的,可以在任何平台上工作。
编辑:@Pete的建议很好,您可以将导入命名以提高可读性from posixpath import join as urljoin
编辑:如果您查看os.py的源代码(这里的代码来自Python 2.7.11,再加上我已经修改了一些位),我想这会更清楚,或者至少帮助我理解。在os.py中有条件导入,它选择要在命名空间os.path中使用的路径模块。所有的底层模块(posixpath,ntpath,os2emxpath,riscospath)都可以在os.py中导入,别名为path,并且存在于所有系统上。os.py只是在运行时根据当前操作系统在命名空间os.path中选择要使用的模块之一。# os.py
import sys, errno
_names = sys.builtin_module_names
if 'posix' in _names:
# ...
from posix import *
# ...
import posixpath as path
# ...
elif 'nt' in _names:
# ...
from nt import *
# ...
import ntpath as path
# ...
elif 'os2' in _names:
# ...
from os2 import *
# ...
if sys.version.find('EMX GCC') == -1:
import ntpath as path
else:
import os2emxpath as path
from _emx_link import link
# ...
elif 'ce' in _names:
# ...
from ce import *
# ...
# We can use the standard Windows path.
import ntpath as path
elif 'riscos' in _names:
# ...
from riscos import *
# ...
import riscospath as path
# ...
else:
raise ImportError, 'no os specific module found'