为什么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>)
.
(强调我的)
如果我有这样的结构:
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>)
.
(强调我的)