我有一个工作模块,我正在尝试在ROOT目录中添加一个统一的yaml文件,供所有子模块使用。
我有一个3级深的子模块,configs.yaml位于root。
现在我正在通过硬编码os.path.split()
行来访问根目录,因为必须使用多个级别,我想知道是否有更多pythonic或更强大的指向目录顶部的方式。
我在窗户上。 Python 3.4,使用py2exe进行构建。
文件夹结构如下。
dps_tools
nydps
winsrv64
以及更多
if hasattr(sys, 'frozen'):
current_directory = os.path.split(sys.executable)[0]
else:
current_directory = os.path.split(os.path.split(os.path.split(os.path.dirname(
os.path.abspath("__file__")))[0])[0])[0]
if hasattr(sys, 'frozen'):
basis = sys.executable
else:
basis = os.path.dirname(os.path.abspath("__file__"))
current_directory = os.path.split(basis)[0]
是否有更一致的方法?或者也许是一种oneline pythonic方式访问目录顶部? (即使我在Windows和目录顶部不是c:)
答案 0 :(得分:1)
首先,请注意os.path.dirname(filepath)
相当于os.path.split(filepath)[0]
。
但是如果你需要提升几个级别,我会使用os.path.normpath(os.path.join(filepath, '..', '..', '..'))
。恕我直言,它更具可读性。
编辑:ntpath
' normpath
也会在输入路径中将/
替换为\\
,因此上面的行可以重写为{ {1}},它可以移植。