2011-10-16 11 views
113

Quiero obtener la ruta del directorio actual bajo el cual se está ejecutando el archivo .py.os.path.dirname (__ file__) returns empty

un simple archivo D:\test.py con código:

import os 

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

está cableado que la salida es:

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

estoy esperando los mismos resultados de la getcwd() y path.dirname().

Dado os.path.abspath = os.path.dirname + os.path.basename, ¿por qué

os.path.dirname(__file__) 

regresa vacía?

Respuesta

183

Porque os.path.abspath = os.path.dirname + os.path.basename no es válido. más bien nosotros tenemos

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

Tanto dirname() y basename() solamente dividir el nombre de archivo pasado a componentes sin tomar en cuenta el directorio actual. Si también desea considerar el directorio actual, debe hacerlo explícitamente.

Para obtener el nombredir de la ruta absoluta, utilice

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

Hola Sven, que tienen razón, debe ser os.path.dirname (os.path.abspath (__ file__)). ¡Gracias! Solo para tu información, obtienes un pequeño error tipográfico en la última línea. – Flake

+8

tenga en cuenta que el comentario anterior tiene un negrita donde debería haber subrayado en ambos lados debido al formato de reducción. la respuesta original se cambió correctamente – watsonic

+1

Tenga en cuenta que nunca tenemos 'os.path.dirname (filename) + os.path.basename (filename) == filename' porque falta el separador de directorios. Preferimos tener: 'os.path.join (os.path.dirname (filename), os.path.basename (filename)) == filename ' –

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

También puede utilizar esta forma

1
import os.path 

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

puede usarse también como la:

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

@Sven La respuesta de Marnach funciona, pero esto se siente mucho más limpio. – lordB8r

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

os.path.realpath(__file__) devuelve el abspath del script actual; os.path.split (abspath) [0] devolver el directorio actual

Cuestiones relacionadas