如果我有这样的结构:
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))
中找到的每个文件的完整路径吗?
答案 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}}