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.