请帮忙理解内置的os.path.join()函数是如何工作的。例如:
在Mac(我猜Linux也是如此),os.name是posixpath的别名。因此,查看posixpath.py模块,join()函数如下:
join()函数返回一个字符串。为什么os.path.join('something').join('something else')能够工作呢?它不应该抛出类似于“str”对象没有属性“join”的错误吗?我的意思是,如果我将函数复制到其他地方并像renamed_join('foo','bar')一样调用它,那么它会按预期工作,但如果我执行renamed_join('foo','bar').renamed_join('foobar'),就会像预期的那样引发AttributeError。希望这不是一个非常愚蠢的问题。当我认为我开始理解Python时,这个问题突然袭击了我...
import os
print os.path.join('cat','dog') # 'cat/dog' no surprise here
print os.path.join('cat','dog').join('fish') # 'fcat/dogicat/dogscat/dogh'
在Mac(我猜Linux也是如此),os.name是posixpath的别名。因此,查看posixpath.py模块,join()函数如下:
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. An empty last part will result in a path that
ends with a separator."""
path = a
for b in p:
if b.startswith('/'):
path = b
elif path == '' or path.endswith('/'):
path += b
else:
path += '/' + b
return path
join()函数返回一个字符串。为什么os.path.join('something').join('something else')能够工作呢?它不应该抛出类似于“str”对象没有属性“join”的错误吗?我的意思是,如果我将函数复制到其他地方并像renamed_join('foo','bar')一样调用它,那么它会按预期工作,但如果我执行renamed_join('foo','bar').renamed_join('foobar'),就会像预期的那样引发AttributeError。希望这不是一个非常愚蠢的问题。当我认为我开始理解Python时,这个问题突然袭击了我...
os.path.join('cat','dog','fish')
,并且得到合理的结果。 - Robᵩ