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

时间:2017-05-05 20:15:23

标签: python python-2.7 os.path

如果我有这样的结构:

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))中找到的每个文件的完整路径吗?

2 个答案:

答案 0 :(得分:4)

  

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

因为这完全是abspath应该做的事情:

  

os.path.abspath则(路径

     

返回路径名路径的规范化绝对化版本。最多的   平台,这相当于调用函数normpath()为   如下:normpath(join(os.getcwd(), path))

(强调我的)

答案 1 :(得分:3)

foo.zip不知道名称os.listdir()来自哪里 - 它不知道它来自某个目录的os.path.join。因此,它不知道用作前缀的正确目录。始终相对于当前目录解释相对路径名。

如果要创建所需的绝对路径名,请使用print os.path.join(in_dir, zip)

{{1}}