1014 votes

Comment obtenir un chemin de fichier absolu en Python

Étant donné un chemin tel que "mydir/myfile.txt" comment trouver le chemin absolu du fichier en Python ? Par exemple, sous Windows, je pourrais obtenir ce résultat :

"C:/example/cwd/mydir/myfile.txt"

1475voto

sherbang Points 2675
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

Fonctionne également s'il s'agit déjà d'un chemin absolu :

>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

43 votes

Note : Sur la plupart des plateformes, ceci est équivalent à l'appel de la fonction normpath() comme suit : normpath(join(os.getcwd(), path)) . Donc si mydir/myfile.txt ne sont pas sous os.getcwd() le chemin absolu est pas le vrai chemin .

41 votes

@coanor ? Sans une racine explicite, mydir/myfile.txt fait implicitement référence à un chemin à l'intérieur du répertoire de travail actuel et est donc équivalent à ./mydir/myfile.txt . Ce n'est peut-être pas le chemin que vous vouliez saisir, mais il semble que ce soit l'interprétation correcte du chemin, d'après ce que je peux voir. Pourriez-vous préciser ?

2 votes

@jpmc26 Je ne suis pas exactement coanor, mais je dirais que (contrairement à ce que je présumais), il n'y a pas de lien entre l'argument à la abspath et un fichier réel. Vous pouvez donner n'importe quel nom de chemin - les fichiers inexistants et les hiérarchies de répertoires ne posent pas de problème - et abspath résoudra simplement les éléments du chemin (y compris le répertoire parent " .. ") et renvoie une chaîne de caractères. Il s'agit simplement d'une chaîne de caractères calculée à partir du répertoire actuel ; toute corrélation avec un fichier réel est accidentelle, semble-t-il. Essayez os.path.abspath("/wow/junk/../blha/hooey") . Cela fonctionne.

55voto

Will Harris Points 17002
>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>

31voto

Tom Points 8420

Installer une tierce partie module de cheminement (trouvé sur PyPI ), il englobe toutes les os.path et d'autres fonctions connexes en méthodes sur un objet qui peut être utilisé partout où des chaînes de caractères sont utilisées :

>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'

3 votes

Dommage qu'il n'y ait jamais eu de module d'abstraction de nom de fichier dans la stdlib.

1 votes

@Torsten Marek : c'est une omission douloureuse et de longue date.

6 votes

Ils l'ont fait maintenant pour Python 3.4 : pathlib . Voir ma réponse dans ce fil.

16voto

omouse Points 2840

Aujourd'hui, vous pouvez également utiliser le unipath qui était basé sur path.py : http://sluggo.scrapping.cc/python/unipath/

>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>

Je recommande l'utilisation de ce paquet car il offre une interface propre pour les utilitaires os.path courants .

-2voto

user1318806 Points 128

Si vous avez installé ipython. Lancez-le, puis tapez pwd

ipython
pwd

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X