os.path.dirname (__ file__) boş döner


165

Bir .py dosyasının yürütüldüğü geçerli dizinin yolunu almak istiyorum.

Örneğin D:\test.py, kod içeren basit bir dosya :

import os

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

Çıktının garip olması:

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

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

Verilen os.path.abspath = os.path.dirname + os.path.basename, neden

os.path.dirname(__file__)

boş döner?

Yanıtlar:


257

Çünkü os.path.abspath = os.path.dirname + os.path.basenametutmuyor. tercih ettik

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

Her ikisi de dirname()ve basename()sadece geçerli dizini dikkate almadan geçirilen dosya adını bileşenlere böler. Geçerli dizini de dikkate almak istiyorsanız, bunu açıkça yapmanız gerekir.

Mutlak yolun dizin adını almak için şunu kullanın:

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

3
Merhaba Sven, haklısın, os.path.dirname (os.path.abspath ( dosya )) olmalıdır. Teşekkürler! Sadece FYI, son satırda küçük bir yazım hatası var.
Flake

11
Yukarıdaki yorumun, biçimlendirme biçimlendirmesi nedeniyle her iki tarafta alt çizgi olması gereken kalın bir yazı olduğunu unutmayın. orijinal cevap doğru bir şekilde değiştirildi
watsonic

1
os.path.dirname(filename) + os.path.basename(filename) == filenameDizin ayırıcı eksik olduğu için asla sahip olmadığımızı unutmayın . Daha doğrusu:os.path.join(os.path.dirname(filename), os.path.basename(filename)) == filename
Jean Paul

Kafam karıştı, programınızda basedir = os.path.abspath (os.path.dirname ( dosya )) bırakmalı mısınız? ya da C: \ Users \ Test \ app.db gibi neyi değiştirirsiniz veya yolunuzu nereye koyarsınız?
0004

@ pes04 __file__geçerli dosyanın adını genişletir, böylece bu yanıttan kodun kelimesi kelimesine bir kopyasını kullanabilirsiniz.
Sven Marnach

9

şu şekilde de kullanılabilir:

dirname(dirname(abspath(__file__)))

7
import os.path

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

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

os.path.realpath(__file__)geçerli betiğin yolunu döndürür; os.path.split (abspath) [0] geçerli dizini döndür


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

Bu şekilde de kullanabilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.