假设工程根目录为 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重名的文件
Tiada cara yang baik melainkan direktori Projek anda tidak pernah dialihkan.
Tambah modul dalam direktori Projek untuk mendapatkan laluan fail semasa
project_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 Projek
os.getcwd()
, anda akan mendapat hasilD:/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 failfile.py
berada.Jika ia dipanggil
D:/Project/__init__.py
, ia akan mendapat laluan direktori kerja di manaD:/Project/__init__.py
terletak, iaituD:/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.
Pemisah direktori untuk "" dan "/"