2011-10-16 20 views
113

Güncel dizinin yolunu .py dosyasının yürütüldüğü yere almak istiyorum. koduylaos.path.dirname (__ file__) boş döndürüyor

Basit dosya D:\test.py:

import os 

print os.getcwd() 
print os.path.basename(__file__) 
print os.path.abspath(__file__) 
print os.path.dirname(__file__) 

O çıkış olduğu kablolu:

D:\ 
test.py 
D:\test.py 
EMPTY 

Ben getcwd() ve path.dirname() aynı sonuçları bekliyorum.

neden

os.path.dirname(__file__) 

döner boş os.path.abspath = os.path.dirname + os.path.basename, Verilen?

cevap

183

os.path.abspath = os.path.dirname + os.path.basename tutmuyor. Biz doğrusu

os.path.dirname(filename) + os.path.basename(filename) == filename 
Hem dirname()

ve basename() sadece hesaba geçerli dizin almadan bileşenlerine geçirilen dosya bölünmüş var. Mevcut dizini de düşünmek istiyorsanız, bunu açıkça yapmanız gerekir.

, mutlak yolun dirname olsun

os.path.dirname(os.path.abspath(__file__)) 
+3

'u döndürür. Merhaba, haklısınız, os.path.dirname (os.path.abspath (__ file__)) olmalıdır. Teşekkürler! Sadece FYI, son satırda küçük bir yazım hatası olsun. – Flake

+8

notu, yukarıdaki yorumun, markdown biçimlendirmesi nedeniyle her iki tarafta da alt çizgi olması gereken bir kalınlığa sahip olduğunu unutmayın. Orijinal cevap doğru şekilde değiştirildi – watsonic

+1

Hiçbir zaman os.path.dirname (dosyaadı) + os.path.basename (dosyaadı) == dosyaadı 'hiçbir zaman dizin ayırıcı eksik olduğundan unutmayın. Daha doğrusu: 'os.path.join (os.path.dirname (dosya adı), os.path.basename (dosya adı)) == dosyaadı' –

3
print(os.path.join(os.path.dirname(__file__))) 

Ayrıca

1
import os.path 

dirname = os.path.dirname(__file__) or '.' 
6

böyle de kullanılabilir bu şekilde kullanabilirsiniz kullanmak için:

dirname(dirname(abspath(__file__))) 
+0

@Sven Marnach'ın cevabı işe yarıyor, ancak bu daha temiz geliyor. – lordB8r

3
os.path.split(os.path.realpath(__file__))[0] 

os.path.realpath(__file__) Geçerli komut dosyasının bit yolunu döndürür; os.path.split (abspath) [0] geçerli dir

İlgili konular