2015-09-29 19 views
6

Ho struttura di directory come questoCome risolvere i percorsi relativi in ​​python?

projectfolder/fold1/fold2/fold3/script.py 

ora sto dando script.py un percorso come argomento della riga di comando di un file che c'è in

fold1/fold_temp/myfile.txt 

Quindi, fondamentalmente voglio essere in grado di dare percorso in questo modo

../../fold_temp/myfile.txt 

>>python somepath/pythonfile.py -input ../../fold_temp/myfile.txt 

Qui problema è che mi venisse data il percorso completo o relativo percorso quindi dovrei essere in grado di decidere e sulla base che ho dovrebbe essere in grado di creare un percorso assoluto.

Conosco già le funzioni relative al percorso.

Question 1

Question 2

domande di riferimento stanno dando risposta parziale, ma non so come costruire il percorso completo utilizzando le funzioni previste in loro.

+0

Se l'utente ha passato un percorso corretto, perché ti importa se è assoluto o relativo? A Python di certo non interessa, e probabilmente al tuo utente non interessa. – tripleee

+0

Possibile duplicato di [Come ottenere un percorso file assoluto in Python] (https://stackoverflow.com/questions/51520/how-to-get-an-absolute-file-path-in-python) –

risposta

-1
import os 
dir = os.path.dirname(__file__) 
path = raw_input() 
if os.path.isabs(path): 
    print "input path is absolute" 
else: 
    path = os.path.join(dir, path) 
    print "absolute path is %s" % path 

utilizzare os.path.isabs per giudicare se il percorso di ingresso è assoluto o relativo, se è relativo, quindi utilizzare os.path.join per convertirlo in assoluto

+1

Questo non funziona come soluzione come nel percorso dir si avrà un percorso per il file di script dove come in base alla domanda non voglio darlo come un percorso .. – niyant

+0

La soluzione di Similer è presente nei collegamenti forniti in questione ... è perfettamente soddisfacente se il tuo file di input si trova nella stessa directory o in qualche sottodirectory con lo stesso genitore – niyant

+0

'os.path.join (dir, path)' è già uguale a 'percorso', se' percorso' è assoluto (testato su Pyhon 3.6). – Mitar

12

prova os.path.abspath, dovrebbe fare quello che vuoi;) In linea di principio converte qualsiasi percorso specificato in un percorso assoluto con cui puoi lavorare, in modo da non dover distinguere tra percorsi relativi e assoluti, basta normalizzarne uno con questa funzione

+1

fornire un piccolo esempio ... è meglio di un link; altrimenti, una buona risposta e verrebbe revocata ... – IAbstract

1

per python3, è possibile utilizzare la funzionalità resolve di pathlib per risolvere i collegamenti simbolici e i componenti .. .

È necessario disporre di un oggetto Path ma è molto semplice eseguire la conversione tra str e Path.

Raccomando a chiunque usi Python3 di eliminare os.path e i suoi nomi di funzione lunghi e disordinati e di attenersi agli oggetti di percorso pathlib.

Problemi correlati