python:获取目录两级

时间:2015-01-08 15:49:26

标签: python path operating-system directory

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

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

import os
two_up = os.path.dirname(os.path.dirname(__file__))

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

12 个答案:

答案 0 :(得分:67)

您可以使用pathlib。不幸的是,这仅适用于Python 3.4的stdlib。如果您有旧版本,则必须从PyPI here安装副本。使用pip很容易做到这一点。

from pathlib import Path

p = Path(__file__).parents[1]

print(p)
# /absolute/path/to/two/levels/up

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

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

答案 1 :(得分:27)

非常简单:

这是你想要的:

import os.path as path

two_up =  path.abspath(path.join(__file__ ,"../.."))

关心Sebi

答案 2 :(得分:18)

我打算将此添加为愚蠢,但也因为它向新手展示了别名功能和/或导入的潜在用途。

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

from os.path import dirname as up

two_up = up(up(__file__))

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

答案 3 :(得分:6)

为了获得目录2级别:

 import os.path as path
 two_up = path.abspath(path.join(os.getcwd(),"../.."))

答案 4 :(得分:5)

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

from pathlib import Path
two_up = Path(__file__).resolve().parents[1]

答案 5 :(得分:3)

就我个人而言,我发现使用os模块是最简单的方法,如下所述。如果您只是上升一级,请用(' ..')替换(' ../..')。

    import os
    os.chdir('../..')

--Check:
    os.getcwd()

答案 6 :(得分:2)

我发现以下在2.7.x中运行良好

import os
two_up = os.path.normpath(os.path.join(__file__,'../'))

答案 7 :(得分:0)

您可以将其用作通用解决方案:

import os

def getParentDir(path, level=1):
  return os.path.normpath( os.path.join(path, *([".."] * level)) )

答案 8 :(得分:0)

更多跨平台实施将是:

import pathlib
two_up = (pathlib.Path(__file__) / ".." / "..").resolve()

Windows不支持使用parent。还需要将.resolve()添加到:

  

使路径绝对,在途中解析所有符号链接并对其进行规范化(例如在Windows下将斜杠转换为反斜杠)

答案 9 :(得分:0)

假设您要访问名为xzy的文件夹,请在python文件中添加两个文件夹。这对我和平台独立都有效。

“ .././ xyz”

答案 10 :(得分:0)

(pathlib.Path('../../')).resolve()

答案 11 :(得分:-1)

我还没有看到2.7的可行答案,它不需要安装其他依赖项,也从文件目录开始。作为单线解决方案并不好,但使用标准实用程序并没有错。

import os

grandparent_dir = os.path.abspath(  # Convert into absolute path string
    os.path.join(  # Current file's grandparent directory
        os.path.join(  # Current file's parent directory
            os.path.dirname(  # Current file's directory
                os.path.abspath(__file__)  # Current file path
            ),
            os.pardir
        ),
        os.pardir
    )
)

print grandparent_dir

为了证明它有效,我在这里开始~/Documents/notes只是为了让我显示当前目录不会影响结果。我将带有该脚本的文件grandpa.py放在名为" scripts"的文件夹中。它爬到Documents目录,然后爬到Mac上的用户目录。

(testing)AlanSE-OSX:notes AlanSE$ echo ~/Documents/scripts/grandpa.py 
/Users/alancoding/Documents/scripts/grandpa.py
(testing)AlanSE-OSX:notes AlanSE$ python2.7 ~/Documents/scripts/grandpa.py 
/Users/alancoding

这是the answer for the parent dir的明显推断。最好使用通用解决方案,而不是使用较少线路的不太好的解决方案。