代码之家  ›  专栏  ›  技术社区  ›  JacobIRR

查找“父级中间同级”目录的方法

  •  2
  • JacobIRR  · 技术社区  · 6 年前

    我有这个目录树:

    C:\A\B\C\D\E\F\myfile.py

    我想为我的包插入如下目录:

    import sys
    local_package_dir = 'C:\A\B\C\PythonPackages'
    sys.path.insert(0, local_package_dir)
    

    我的问题是许多人使用不同的驱动器名(D:,E:,等等)。

    如何动态遍历目录并访问 A\B\C 不关心根级驱动器叫什么?

    我知道 __file__ 但是哪种组合 os 功能将帮助我达到正确的水平?

    2 回复  |  直到 6 年前
        1
  •  1
  •   kagronick    6 年前

    看看Pathlib。它是新的更好的替代品 os.path

    可以将路径用作对象。零件会有你需要的。

    import pathlib
    p = pathlib.PureWindowsPath('c:/Program Files/PSF')
    >>> p.parts
    ('c:\\', 'Program Files', 'PSF')
    
    p = pathlib.PureWindowsPath('c:/A/B/C/D').parts[1:]
    >>> -p.parts
    ('A', 'B', 'C', 'D')
    
        2
  •  -1
  •   zwer    6 年前

    你可以用 os.path.pardir 作为对父目录的引用(基本上 .. )然后使用 os.path.join() 以相对的方式前进,最后 os.path.normpath() 规范化您的路径,例如从 C:\\A\\B\\C\\D\\E\\F\\myfile.py C:\\A\\B\\C 你可以这样做:

    current_file = "C:\\A\\B\\C\\D\\E\\F\\myfile.py"  # or __file__ if running from myfile.py
    path = os.path.dirname(current_file)  # get the file's directory
    c_dir = os.path.normpath(os.path.join(path, os.path.pardir, os.path.pardir, os.path.pardir))
    # C:\A\B\C
    

    在python 3.4+上,您还可以使用 pathlib 使这些平凡的路径操作更容易接受。