python如何获取当前工程根目录
大家讲道理
大家讲道理 2017-04-17 17:46:09
0
6
1534

假设工程根目录为 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重名的文件

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(6)
黄舟

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

小葫芦

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

阿神

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))
小葫芦
import sys,os
path = sys.path[0]
阿神
 aList = os.getcwd().split('\')
 path = aList[0]+'\'+aList[1]
小葫芦
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 "/"

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan