2012-04-05 14 views
5

Pronunciare il percorso del file 'file1.txt' è /home/bentley4/Desktop/sc/file1.txt Dire il mio directory di lavoro corrente è /home/bentley4os.path.abspath ('file1.txt') non restituisce il percorso corretto

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

restituisce /home/bentley4/file1.txt

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

rendimenti False. Se faccio

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

Esso restituisce /home/bentley4/file_that_does_not_exist.txt Ma ancora una volta, questo non è corretto. Il file non esiste nemmeno sul mio computer. C'è un modo per ottenere il percorso assoluto corretto da qualsiasi directory in cui sto attualmente lavorando? (oltre a definire una nuova funzione)

Quindi questo funziona solo quando sono nella stessa directory del file esistente o nella directory di una directory o più lontano dal percorso della directory di quel file?

+3

che è abbastanza curioso, 'os.path.abspath' dovrebbe funzionare. Cosa restituisce 'os.getcwd()'? ... Oh, d'oh, aspetta, stai dicendo che sei in '/ home/bentley4' e ti stai aspettando' os.path.abspath' per trovare in qualche modo un file in una sottodirectory di ? Non lo fa – torek

+0

Cosa stai cercando di fare? Stai cercando di trovare un file per nome in una delle sottodirectory della tua attuale directory di lavoro? –

risposta

11

os.path.abspath(filename) restituisce un percorso assoluto come visto dalla directory di lavoro corrente. Non controlla se il file esiste realmente.

Se si desidera il percorso assoluto di /home/bentley4/Desktop/sc/file1.txt e si è in /home/bentley4, sarà necessario utilizzare os.path.abspath("Desktop/sc/file1.txt").

+2

Bene, inizia controllando 'os.path.isabs()'. Ma in questo caso, sì. – torek

1

abspath crea solo un percorso, non controlla nulla sui file esistenti.

Dalla documentazione:

Sulla maggior parte delle piattaforme, questo è equivalente a normpath (join (os.getcwd(), percorso)).

0

Si otterrà il percorso con os.path.abspath(__file__).

+0

Questo non funziona. os.path.abspath ('__ file1.txt__') si comporta come os.path.abspath ('file1.txt'). – Bentley4

+3

@ Bentley4 os.path.abspath ('file1.txt') si comporterà sempre come os.path.abspath ('file1.txt') fino a quando Python vive ... – JSmyth

0

Il problema dovrebbe essere che in precedenza il cwd è stato modificato utilizzando os.chdir (another_path) ed è ancora caricato nel contesto dell'esecuzione corrente. quindi la correzione deve essere ripristinata il percorso originale dopo che l'utilizzo dell'attività in another_path è terminato.
Esempio:

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 
Problemi correlati