好的...我不知道模块x
在哪里,但是我知道我需要获取到上两级目录的路径。
那么,是否有更加优雅的方法来实现:
import os
two_up = os.path.dirname(os.path.dirname(__file__))
欢迎提供适用于Python 2和3的解决方案!
好的...我不知道模块x
在哪里,但是我知道我需要获取到上两级目录的路径。
那么,是否有更加优雅的方法来实现:
import os
two_up = os.path.dirname(os.path.dirname(__file__))
欢迎提供适用于Python 2和3的解决方案!
Path
类的parents
方法取决于执行位置。如果你在当前目录下执行__file__
,那么Path
类将没有父级路径。要么接受@Sebi2020的答案,要么使用你最初的方法。我认为你最初的方法更易读。 - Red-Tune-84p = Path(os.path.abspath(__file__)).parents[1]
。 - Adam RaudonisPath(__file__).resolve().parents[1]
代替 os.path.abspath
。这个方法能够得到相同的结果,更加简洁和易于理解。 - Tulio Casagrandep = Path(__file__).resolve().parents[1]
。我也将其添加为答案。 - pythinker非常简单:
这是你想要的内容:
import os.path as path
two_up = path.abspath(path.join(__file__ ,"../.."))
os.pardir
而不是..
。 - jme__file__
和其他内容连接起来并不总是会得到有效的路径。 - ebk我原本只是想加上这个东西来卖个傻,但同时也因为它展示了别名函数和/或导入在潜在实用性方面对新手的帮助。
写完后,我认为这段代码比迄今为止其他答案更易读(即理解意图所需的时间更短),而可读性通常是至关重要的。
from os.path import dirname as up
two_up = up(up(__file__))
注意:只有在你的模块非常小或者上下文一致时,才需要这样做。
从任何目录执行时,Python版本大于等于3.4的最佳解决方案是:
from pathlib import Path
two_up = Path(__file__).resolve().parents[1]
获取向上 2 级目录:
import os.path as path
curr_dir=Path(os.path.dirname(os.path.abspath(__file__)))
two_dir_up_=os.fspath(Path(curr_dir.parent.parent).resolve())
我已经采取了以下措施,向上提升两个级别并钻取到其他目录
default_config_dir=os.fspath(Path(curr_dir.parent.parent,
'data/config').resolve())
个人而言,我发现使用 os 模块是最简单的方法,如下所述。如果您只需要上升一个级别,请将 ('../..') 替换为 ('..')。
import os
os.chdir('../..')
--Check:
os.getcwd()
更多跨平台实现将会:
import pathlib
two_up = (pathlib.Path(__file__) / ".." / "..").resolve()
在Windows上不支持使用parent
。此外需要添加.resolve()
,以便:
将路径变为绝对路径,在此过程中解决所有符号链接,并进行归一化处理(例如,在Windows下将斜杠转换为反斜杠)
parent
。 @Zhukovgeen,你说的是哪个版本的Python? - ggulgulia(pathlib.Path('../../') ).resolve()
令人惊讶的是,似乎还没有人探索过这个不错的一行代码选项:
import os
two_up = os.path.normpath(__file__).rsplit(os.sep, maxsplit=2)[0]
rsplit
是一个有趣的函数,因为 maxsplit
参数直接表示向上移动多少级父文件夹,并且它总是在一次路径遍历中返回结果。
100%工作答案:
os.path.abspath(os.path.join(os.getcwd() ,"../.."))
pathlib
解决方案更加优雅和可读,但是它并未包含在 Python 2.7 中。我建议坚持使用你现有的方案,或者加上注释。 - jmepip install pathlib2
选项以保持在2.7中的正常。 - jonathanos.path.abspath(os.path.join(os.getcwd(), os.path.pardir, os.path.pardir))
。 - Elias