Python使用os.path.join加入当前目录和父目录

时间:2013-06-25 10:36:14

标签: python os.path

我想在目录树中的某个位置加入当前目录路径和相对目录路径goal_dir,因此我获得了goal_dir的绝对路径。这是我的尝试:

import os
goal_dir = os.path.join(os.getcwd(), "../../my_dir")

现在,如果当前目录是C:/here/I/am/,它会以C:/here/I/am/../../my_dir加入它们,但我想要的是C:/here/my_dir。似乎os.path.join并不那么聪明。

我该怎么做?

3 个答案:

答案 0 :(得分:24)

您可以使用normpathrealpathabspath

import os
goal_dir = os.path.join(os.getcwd(), "../../my_dir")
print goal_dir  # prints C:/here/I/am/../../my_dir
print os.path.normpath(goal_dir)  # prints C:/here/my_dir
print os.path.realpath(goal_dir)  # prints C:/here/my_dir
print os.path.abspath(goal_dir)  # prints C:/here/my_dir

答案 1 :(得分:3)

考虑使用os.path.abspath这将评估绝对路径

或者可以使用os.path.normpath这将返回规范化路径(规范化路径,消除双斜线等)

应根据要求选择其中一项功能

如果abspath在您的示例中您不能使用os.path.join

os.path.abspath("../../my_dir")
如果您对相对路径感兴趣,则应使用

os.path.normpath

>>> os.path.normpath("../my_dir/../my_dir")
'../my_dir'

答案 2 :(得分:0)

最近,我发现了pathlib。

from pathlib import Path
cwd = Path.cwd()
goal_dir = cwd.parent.parent / "my_dir"

或者,使用当前脚本的文件:

cwd = Path(__file__).parent
goal_dir = cwd.parent.parent / "my_dir"

在两种情况下,都可以这样找到简化形式的绝对路径:

goal_dir = goal_dir.resolve()