2017-05-05 23 views
1

如果我有一个像这样的结构:为什么os.path.abspath()返回cwd +文件的路径?

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

怎么是'ABSPATH()'应该知道,你从列出目录中的文件名?它所得到的就是字符串,它不知道它来自哪里。 – Barmar

+0

'abspath'采用相对于当前目录的路径。 – user2357112

+0

'abspath'不以任何方式触及文件系统。它只需要程序的当前工作目录并从那里添加路径组件。任何文件或目录在执行任务时都不需要存在。这会使创建新文件变得非常困难。 – tdelaney

回答

4

为什么os.path.abspath则()返回CWD的路径+文件

因为这是毫不夸张地说什么abspath是应该做的:

os.path.abspath则(路径)的路径路径

返回归一化绝对化的版本。在大多数 平台上,这相当于调用函数normpath(),因为 如下:normpath(join(os.getcwd(), path))

(重点煤矿)

3

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

如果你想创建所需的绝对路径,使用os.path.join

print os.path.join(in_dir, zip) 
相关问题