2012-04-05 7 views
5

Diga el camino de la 'file1.txt' archivo es /home/bentley4/Desktop/sc/file1.txt decir que mi directorio de trabajo actual es /home/bentley4os.path.abspath ('file1.txt') no devuelve la ruta correcta

import os 
os.path.abspath('file1.txt') 

devuelve /home/bentley4/file1.txt

os.path.exists('file1.txt') 

vuelve False. Si hago

os.path.abspath('file_that_does_not_exist.txt') 

Devuelve /home/bentley4/file_that_does_not_exist.txt Pero, de nuevo, esto no es correcto. El archivo ni siquiera existe en mi computadora. ¿Hay alguna forma de obtener la ruta absoluta correcta desde cualquier directorio en el que estoy trabajando actualmente? (aparte de definir una nueva función)

¿Esto solo funciona cuando estoy en el mismo directorio que el archivo existente o en el directorio un directorio o más más allá de la ruta del directorio de ese archivo?

+3

que es bastante curioso, 'os.path.abspath' solo debería funcionar. ¿Qué devuelve 'os.getcwd()'? ... Oh, oh, espera, estás diciendo que estás en '/ home/bentley4' y esperas que' os.path.abspath' encuentre de algún modo un archivo en un subdirectorio de la misma ? No hace eso. – torek

+0

¿Qué estás tratando de hacer? ¿Está tratando de encontrar un archivo por nombre en cualquiera de los subdirectorios de su directorio de trabajo actual? –

Respuesta

11

os.path.abspath(filename) devuelve una ruta absoluta como se ve desde su directorio de trabajo actual. No verifica si el archivo realmente existe.

Si desea la ruta absoluta de /home/bentley4/Desktop/sc/file1.txt y se encuentra en /home/bentley4, deberá usar os.path.abspath("Desktop/sc/file1.txt").

+2

Bueno, comienza marcando 'os.path.isabs()'. Pero en este caso, sí. – torek

1

abspath solo crea una ruta, no comprueba nada acerca de los archivos existentes.

A partir de los documentos:

En la mayoría de las plataformas, esto es equivalente a Normpath (join (os.getcwd(), ruta)).

0

Obtendrá la ruta con os.path.abspath(__file__).

+0

Esto no funciona. os.path.abspath ('__ file1.txt__') se comporta de la misma manera que os.path.abspath ('file1.txt'). – Bentley4

+3

@ Bentley4 os.path.abspath ('archivo1.txt') siempre se comportará igual que os.path.abspath ('archivo1.txt') mientras Python viva ... – JSmyth

0

El problema debería ser que anteriormente el cwd se cambió utilizando os.chdir (another_path) y todavía se carga en el contexto de la ejecución actual. , por lo que la corrección debe restablecer la ruta de acceso original una vez que finalice el uso de la tarea en otra ruta.
Ejemplo:

original_path = os.getcwd() 
    os.chdir(another_path) 
    # here perform some operation over another_path 
    os.chdir(original_path) # here is the restore of the original path 
Cuestiones relacionadas