Pythonic路径分裂。风格和最佳实践

时间:2015-11-11 14:00:33

标签: python path operating-system py2exe ntfs

我有一个工作模块,我正在尝试在ROOT目录中添加一个统一的yaml文件,供所有子模块使用。

我有一个3级深的子模块,configs.yaml位于root。

现在我正在通过硬编码os.path.split()行来访问根目录,因为必须使用多个级别,我想知道是否有更多pythonic或更强大的指向目录顶部的方式。

我在窗户上。 Python 3.4,使用py2exe进行构建。

文件夹结构如下。

  • dps_tools

    • nydps

      • 编辑
        • 分贝
          • session.py
    • winsrv64

      • editservice.py

以及更多

session.py段

 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]

editservice.py

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:)

1 个答案:

答案 0 :(得分:1)

首先,请注意os.path.dirname(filepath)相当于os.path.split(filepath)[0]

但是如果你需要提升几个级别,我会使用os.path.normpath(os.path.join(filepath, '..', '..', '..'))。恕我直言,它更具可读性。

编辑:ntpath' normpath也会在输入路径中将/替换为\\,因此上面的行可以重写为{ {1}},它可以移植。