os.path.dirname (__ file__) restituisce vuoto


165

Voglio ottenere il percorso della directory corrente in cui viene eseguito un file .py.

Ad esempio un semplice file D:\test.pycon codice:

import os

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

È strano che l'output sia:

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

Mi aspetto gli stessi risultati da getcwd()e path.dirname().

Dato os.path.abspath = os.path.dirname + os.path.basename, perché

os.path.dirname(__file__)

ritorna vuoto?

Risposte:


257

Perché os.path.abspath = os.path.dirname + os.path.basenamenon regge. noi preferiamo

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

Entrambi dirname()ebasename() solo dividere il nome del file passato in componenti senza tenere conto della directory corrente. Se si desidera considerare anche la directory corrente, è necessario farlo esplicitamente.

Per ottenere il dirname del percorso assoluto, utilizzare

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

3
Ciao Sven, hai ragione, dovrebbe essere os.path.dirname (os.path.abspath ( file )). Grazie! Cordiali saluti, ottieni un piccolo errore di battitura nell'ultima riga.
Flake,

11
nota che il commento sopra ha un grassetto in cui ci dovrebbe essere sottolineato su entrambi i lati a causa della formattazione markdown. la risposta originale fu cambiata correttamente
watsonic il

1
Nota che non l'abbiamo mai fatto os.path.dirname(filename) + os.path.basename(filename) == filenameperché manca il separatore di directory. Preferiamo invece:os.path.join(os.path.dirname(filename), os.path.basename(filename)) == filename
Jean Paul,

Sono confuso, dovresti lasciare basedir = os.path.abspath (os.path.dirname ( file )) nel tuo programma? o cosa sostituisci o dove sostituisci il tuo percorso come C: \ Users \ Test \ app.db?
0004,

@ pes04 si __file__espande al nome del file corrente, quindi è possibile utilizzare una copia integrale del codice da questa risposta.
Sven Marnach,

9

può essere usato anche in questo modo:

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__)restituisce il abspath dell'attuale script; os.path.split (abspath) [0] restituisce la directory corrente


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

Puoi anche usare in questo modo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.