好的......我不知道模块x
在哪里,但我知道我需要获得目录两级的路径。
那么,是否有一种更优雅的方式:
import os
two_up = os.path.dirname(os.path.dirname(__file__))
欢迎使用Python 2和3的解决方案!
答案 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的明显推断。最好使用通用解决方案,而不是使用较少线路的不太好的解决方案。