请帮助我理解内置 os.path.join() 函数的工作原理。例如:
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
。 os.path.join
返回一个字符串;调用 join
方法调用常规字符串 join
method ,这是完全不相关的。
关于python - os.path.join() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645420/