web-dev-qa-db-fra.com

Comment résoudre les chemins relatifs en python?

J'ai une structure de répertoire comme celle-ci

projectfolder/fold1/fold2/fold3/script.py

maintenant je donne à script.py un chemin en argument de ligne de commande d'un fichier qui est là 

fold1/fold_temp/myfile.txt

Donc, fondamentalement, je veux pouvoir donner le chemin de cette façon 

../../fold_temp/myfile.txt 

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

Le problème ici est que je pourrais avoir un chemin complet ou un chemin relatif, donc je devrais être capable de décider et sur cette base, je pourrais être capable de créer un chemin absolu.

J'ai déjà une connaissance des fonctions liées au chemin. 

Question 1

Question 2

Les questions de référence donnent une réponse partielle, mais je ne sais pas comment créer un chemin complet à l'aide des fonctions fournies. 

12
niyant

essayez os.path.abspath , il devrait faire ce que vous voulez;)

Fondamentalement, il convertit n'importe quel chemin donné en un chemin absolu sur lequel vous pouvez travailler. Vous n'avez donc pas besoin de faire la distinction entre les chemins relatifs et les chemins absolus, il vous suffit de normaliser l'un d'eux avec cette fonction.

Exemple:

from os.path import abspath
filename = abspath('../../fold_temp/myfile.txt')
print(filename)

Il va sortir le chemin absolu de votre fichier.

MODIFIER:

Si vous utilisez Python 3.4 ou une version plus récente, vous pouvez également utiliser la méthode resolver () de pathlib.Path . Sachez que cela retournera un objet Path et non une chaîne. Si vous avez besoin d'une chaîne, vous pouvez toujours utiliser str() pour la convertir en chaîne.

Exemple:

from pathlib import Path
filename = Path('../../fold_temp/myfile.txt').resolve()
print(filename)
26
Salo

Pour Python3, vous pouvez utiliser la fonctionnalité resol de pathlib pour résoudre les liens symboliques et les composants ...

Vous devez avoir un objet Path, mais il est très simple de convertir entre str et Path.

Je recommande à toute personne utilisant Python3 de supprimer os.path et ses noms de fonction longs et compliqués et de s'en tenir aux objets pathlib Path.

2
Bryce Guinta