39

我想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没有那么聪明。

我怎样才能做到这一点?

4

3 回答 3

47

您可以使用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
于 2013-06-25T10:38:02.987 回答
10

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

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

应该根据要求选择这些功能之一

在 In Your example的情况下abspath,您不需要使用os.path.join

os.path.abspath("../../my_dir")

os.path.normpath如果您对相对路径感兴趣,应该使用。

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

处理文件路径的其他参考:

  • pathlib - 面向对象的文件系统路径
  • os.path - 常见的路径名操作
于 2013-06-25T10:38:18.097 回答
5

最近,我发现了 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()
于 2019-10-25T13:46:37.397 回答