recherche

Maison  >  Questions et réponses  >  le corps du texte

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 Il y a quelques jours1538

répondre à tous(6)je répondrai

  • 黄舟

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

    Il n'y a pas de bon moyen à moins que votre répertoire de projet ne soit jamais déplacé.

    Ajoutez un module dans le répertoire du projet pour obtenir le chemin du fichier actuelproject_dir = os.path.dirname(os.path.abspath(__file__)), puis importez-le dans file.py

    répondre
    0
  • 高洛峰

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

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

    répondre
    0
  • 阿神

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

    Si vous mobilisez enfin le du file.py sous le fichier Projetos.getcwd(), vous obtiendrez le résultat D:/Project.

    Par exemple, si vous créez une structure de projet comme celle-ci, si vous l'appelez directement dans D:/Project/a/b/c/d/file.py, vous aurez naturellement besoin du chemin du répertoire de travail où se trouve le fichier file.py.

    S'il est appelé dans D:/Project/__init__.py, il obtiendra le chemin du répertoire de travail où se trouve D:/Project/__init__.py, qui est D:/Project/.

    os.getcwd()Les résultats obtenus sont différents selon le chemin du fichier appelant.


    Si vous êtes sûr du nom du répertoire du projet et assurez-vous qu'aucun dossier portant le même nom n'apparaîtra dans le répertoire du projet, vous pouvez utiliser des expressions régulières.

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

    répondre
    0
  • 高洛峰

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

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

    répondre
    0
  • 阿神

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

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

    répondre
    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])
    

    Séparateur de répertoire pour "" et "/"

    répondre
    0
  • Annulerrépondre