假设工程根目录为 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重名的文件
黄舟2017-04-17 17:48:09
沒有很好的辦法,除非你的 Project 目錄永遠不會移動。
在 Project 目錄下加個模組取得目前檔案的路徑project_dir = os.path.dirname(os.path.abspath(__file__))
,然後在 file.py 導進來
高洛峰2017-04-17 17:48:09
逐級往上
os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.getcwd()))))
阿神2017-04-17 17:48:09
如果你最後在Project檔案下才調動file.py的os.getcwd()
的話,就會得到D:/Project
這個結果。 os.getcwd()
的话,就会得到D:/Project
这个结果。
比如说你建立了一个这样的项目结构,如果在是在D:/Project/a/b/c/d/file.py
直接调用的话,很自然就是得file.py
文件所在的工作目录的路径。
如果是在D:/Project/__init__.py
调用呢,那就是得到D:/Project/__init__.py
所在的工作目录的路径,也就是D:/Project/
了。
os.getcwd()
D:/Project/a/b/c/d/file.py
直接呼叫的話,很自然就是得 file.py
檔案所在的工作目錄的路徑。 D:/Project/__init__.py
呼叫呢,那就是得到D:/Project/__init__.py
所在的工作目錄的路徑,也就是< code>D:/Project/了。
os.getcwd()
是根據呼叫檔案所在路徑的不同,得到的結果也是不同的。 🎜
🎜
🎜如果你確定專案目錄的名稱且保證在專案目錄下不會出現同名資料夾的話,可以用正規表示式。 🎜
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))
高洛峰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])
適用於""和"/"的目錄分隔符號