python:获取目录两级

jra*_*amm 61 python directory operating-system path

好的...我不知道模块在哪里x,但我知道我需要获得目录两级的路径.

那么,是否有更优雅的方式:

import os
two_up = os.path.dirname(os.path.dirname(__file__))
Run Code Online (Sandbox Code Playgroud)

欢迎使用Python 2和3的解决方案!

Ffi*_*ydd 79

你可以用pathlib.不幸的是,这仅适用于Python 3.4的stdlib.如果您有旧版本,则必须在此处安装PyPI副本.这应该很容易使用pip.

from pathlib import Path

p = Path(__file__).parents[1]

print(p)
# /absolute/path/to/two/levels/up
Run Code Online (Sandbox Code Playgroud)

这使用parents提供对父目录的访问的序列并选择第二个.

请注意,p在这种情况下,将是某种形式的Path对象,具有自己的方法.如果您需要将路径作为字符串,那么您可以调用str它们.

  • 这不应该是公认的答案,因为`Path`类的`parent`依赖于执行位置.如果从当前目录执行`__file__`,`Path`类将没有父项.@ Sebi2020的答案应该被接受,或者应该使用你的原始方法.我相信你原来的方法更具可读性. (13认同)
  • @AdamRaudonis 除了`os.path.abspath`,您还可以使用`Path(__file__).resolve().parents[1]` (5认同)
  • 如@Kazanz所述,从其他路径执行此解决方案无效。最好的解决方案是:`p = Path(__ file __)。resolve()。parents [1]`。我也将其添加为答案。 (2认同)

Seb*_*020 35

很容易:

这是你想要的:

import os.path as path

two_up =  path.abspath(path.join(__file__ ,"../.."))
Run Code Online (Sandbox Code Playgroud)

关心Sebi

  • 也许使用`os.pardir`而不是`..`. (5认同)
  • @jme你知道一个操作系统,你可以用另一个字符串而不是“..”来获取父目录吗??? (2认同)

and*_*sit 20

我打算添加它只是为了愚蠢,但也因为它向新手展示了混叠函数和/或导入的潜在用途.

写完之后,我认为这段代码比其他日期答案更具可读性(即掌握意图的时间更短),可读性(通常)是王道.

from os.path import dirname as up

two_up = up(up(__file__))
Run Code Online (Sandbox Code Playgroud)

注意:如果您的模块非常小或具有上下文的内聚性,那么您只想做这种事情.


zer*_*cog 8

要获得目录2级别:

 import os.path as path
 two_up = path.abspath(path.join(os.getcwd(),"../.."))
Run Code Online (Sandbox Code Playgroud)


pyt*_*ker 6

从任何目录执行时,最佳解决方案(对于python> = 3.4)是:

from pathlib import Path
two_up = Path(__file__).resolve().parents[1]
Run Code Online (Sandbox Code Playgroud)