cari

Rumah  >  Soal Jawab  >  teks badan

python如何获取当前工程根目录

假设工程根目录为 d:/Project/

然后在 d:/Project/a/b/c/d/file.py 里使用 os.getcwd() 方法获取的是
d:/Project/a/b/c/d

现在我想获取 d:/Project 怎么做?

------------------------------------分割线---------------------------------
谢谢大家的热情回答,都怪我没有将问题说清楚,我的意思是获取当前工程的根目录,而获取根目录的函数可能在任何目录下

根目录既可能是 d:/Project/
也可能是 d:/Python/Project/
也可能是 d:/balabala/Python/Project/
因此逐级往上也是不可能找到的,我目前的方法是在根目录下放一个文件 file

然后这样:

def getSeparator():
    if 'Windows' in platform.system():
        separator = '\\'
    else:
        separator = '/'
    return separator

def findPath(file):
    o_path = os.getcwd()
    separator = getSeparator()
    str = o_path
    str = str.split(separator)
    while len(str) > 0:
        spath = separator.join(str)+separator+file
        leng = len(str)
        if os.path.exists(spath):
            return spath
        str.remove(str[leng-1])

但是这样也有一个问题,就是必须保证任何目录下不能有和根目录下file重名的文件

大家讲道理大家讲道理2802 hari yang lalu1539

membalas semua(6)saya akan balas

  • 黄舟

    黄舟2017-04-17 17:48:09

    Tiada cara yang baik melainkan direktori Projek anda tidak pernah dialihkan.

    Tambah modul dalam direktori Projek untuk mendapatkan laluan fail semasaproject_dir = os.path.dirname(os.path.abspath(__file__)), dan kemudian importnya dalam file.py

    balas
    0
  • 高洛峰

    高洛峰2017-04-17 17:48:09

    逐级往上
    os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.getcwd()))))

    balas
    0
  • 阿神

    阿神2017-04-17 17:48:09

    Jika anda akhirnya menggerakkan file.py di bawah fail Projekos.getcwd(), anda akan mendapat hasil D:/Project.

    Sebagai contoh, jika anda mencipta struktur projek seperti ini, jika anda memanggilnya terus dalam D:/Project/a/b/c/d/file.py, anda sememangnya memerlukan laluan direktori kerja di mana fail file.py berada.

    Jika ia dipanggil D:/Project/__init__.py, ia akan mendapat laluan direktori kerja di mana D:/Project/__init__.py terletak, iaitu D:/Project/.

    os.getcwd()Hasil yang diperoleh adalah berbeza bergantung pada laluan fail panggilan.


    Jika anda pasti dengan nama direktori projek dan memastikan tiada folder dengan nama yang sama akan muncul dalam direktori projek, anda boleh menggunakan ungkapan biasa.

    import re, os
    
    # 测试
    paths = ['d:\Project\', 'home/Python/Project/', 'c:/balabala/Python/Project/']
    for path in paths:
        pj_dir = re.match('.*Project', path)
        print(pj_dir.group())
        
    # 在子文件下就应该这样用
    print(re.match('(.*\{sep}Project)\{sep}'.format(sep=os.sep), __file__).group(1))

    balas
    0
  • 高洛峰

    高洛峰2017-04-17 17:48:09

    import sys,os
    path = sys.path[0]
    

    balas
    0
  • 阿神

    阿神2017-04-17 17:48:09

     aList = os.getcwd().split('\')
     path = aList[0]+'\'+aList[1]

    balas
    0
  • 高洛峰

    高洛峰2017-04-17 17:48:09

    import os
    
    s1 = "d:/Project/a/b/c/d/file.py"
    s2 = r"d:\project\a\b\c\d\file.py"
    
    for i in [s1, s2]:
        abs_path = os.path.abspath(i).split(os.sep)
        print os.path.abspath(abs_path[0] + os.sep + abs_path[1])
    

    Pemisah direktori untuk "" dan "/"

    balas
    0
  • Batalbalas