为什么os.path.abspath() return cwd+file的路径?

Why does os.path.abspath() return the path of cwd+file?

如果我有这样的结构:

root/
-- group1/
---- names/
---- places/
------ foo.zip

为什么当我调用 os.path.abspath('foo.zip') 时我得到 Python 脚本所在的文件路径加上 foo.zip

看起来像:H:\Program\Scripts\foo.zip

需要:H:\Progran\Groups\group1\names\places\foo.zip

这是导致问题的函数的代码:

def unzip(in_dir):
    # in_dir is places passed to unzip()
    files = [f for f in os.listdir(os.path.abspath(in_dir)) if f.endswith('.zip')]
    for zip in files:
        # This prints the 'looks like' path above
        print os.path.abspath(zip)

不应该 print os.path.abspath(zip) 给我在 os.listdir(os.path.abspath(in_dir)) 中找到的每个文件的完整路径吗?

os.path.abspath() 不知道名称 foo.zip 的来源——它不知道它来自某个目录的 os.listdir()。所以它不知道那是用作前缀的正确目录。相对路径名始终相对于当前目录进行解释。

如果要创建所需的绝对路径名,请使用 os.path.join:

print os.path.join(in_dir, zip)

Why does os.path.abspath() return the path of cwd+file?

因为这正是 abspath 应该做的:

os.path.abspath(path)

Return a normalized absolutized version of the pathname path. On most platforms, this is equivalent to calling the function normpath() as follows: normpath(<b>join(os.getcwd(), path)</b>).

(强调我的)