【问题标题】:Pythonic path splitting. Style, and best practicePythonic 路径拆分。风格和最佳实践
【发布时间】:2015-11-11 14:00:32
【问题描述】:

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

我有一个 3 层深的子模块,configs.yaml 位于根目录。

现在我正在通过硬编码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]

有没有更一致的方法?或者也许是访问目录顶部的单线pythonic方式? (即使我在 windows 上并且目录顶部不是 c :)

【问题讨论】:

  • 为什么不把目录作为参数,然后从适当的地方传入呢?
  • 我可以在构建期间向 py2exe 提供参数吗?我没试过
  • 我最终也会构建这个 as msi,我最初将它作为一个程序化决策来处理,让我看看我是否可以传递参数

标签: python path operating-system py2exe ntfs


【解决方案1】:

首先,注意os.path.dirname(filepath) 等价于os.path.split(filepath)[0]

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

编辑:ntpathnormpath 也将在输入路径中将/ 替换为\\,因此上面的行可以重写为os.path.normpath(os.path.join(filepath, '../../..')),并且它是可移植的。

【讨论】:

    猜你喜欢
    • 2018-05-17
    • 2012-02-24
    • 1970-01-01
    • 2021-10-14
    • 2018-02-28
    • 2021-09-07
    • 2011-10-30
    • 2012-05-12
    • 2016-08-01
    相关资源
    最近更新 更多