python - os.path.join() 是如何工作的?

标签 python macos path built-in

请帮助我理解内置 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.joinos.path.join 返回一个字符串;调用 join 方法调用常规字符串 join method ,这是完全不相关的。

关于python - os.path.join() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645420/

相关文章:

Python Windows 7 - 安装失败 0x80240017

python - 在选择上设置默认设置会删除为填充表单而传入的设置

Python:无法从文件中替换行

python - 具有 Bokeh 的 Networkx 节点属性的颜色节点

java - 如何知道mac平台是macOSx64还是macOSaarch64

macos - MacPorts 中的 glib 的 g_object_set 链接器错误

java -/Library/Java/Extensions 的作用是什么 - 从那里添加或删除类是否安全?

使用 Path 而不是 FileSet 的 Ant Copy 任务

python - A* python 麻烦,目标永远找不到

bash - 在 Mac 上安装 Flutter 时编辑 .bash_profile 时出现问题