Comment obtenir un chemin de fichier absolu en Python
-
09-06-2019 - |
Question
Étant donné un chemin tel que "mydir/myfile.txt"
, comment trouver le chemin absolu du fichier par rapport au répertoire de travail actuel en Python ?Par exemple.sous Windows, je pourrais me retrouver avec :
"C:/example/cwd/mydir/myfile.txt"
La solution
>>> 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'
Autres conseils
Vous pouvez utiliser la nouvelle bibliothèque Python 3.4 pathlib
.(Vous pouvez également l'obtenir pour Python 2.6 ou 2.7 en utilisant pip install pathlib
.) Les auteurs a écrit:"Le but de cette bibliothèque est de fournir une hiérarchie simple de classes pour gérer les chemins du système de fichiers et les opérations courantes que les utilisateurs effectuent sur eux."
Pour obtenir un chemin absolu sous Windows :
>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'
Ou sous UNIX :
>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'
Les documents sont ici : https://docs.python.org/3/library/pathlib.html
>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
Mieux encore, installez le module (trouvé sur PyPI
), il enveloppe tout le os.path
fonctions et autres fonctions associées en méthodes sur un objet qui peuvent être utilisées partout où des chaînes sont utilisées :
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
Aujourd'hui, vous pouvez également utiliser le unipath
paquet 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 recommanderais d'utiliser ce package car il propose une interface claire avec les utilitaires os.path courants.
Mise à jour pour Python 3.4+ pathlib
cela répond en fait à la question :
from pathlib import Path
relative = Path("mydir/myfile.txt")
absolute = relative.absolute() # absolute is a Path object
Si vous n'avez besoin que d'une chaîne temporaire, gardez à l'esprit que vous pouvez utiliser Path
objets avec toutes les fonctions pertinentes dans os.path
, y compris bien sûr abspath
:
from os.path import abspath
absolute = abspath(relative) # absolute is a str object
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))
Noter que expanduser
est nécessaire (sous Unix) dans le cas où l'expression donnée pour le nom et l'emplacement du fichier (ou du répertoire) peut contenir un début ~/
(le tilde fait référence au répertoire personnel de l'utilisateur), et expandvars
prend en charge toutes les autres variables d'environnement (comme $HOME
).
Je préfère utiliser glob
voici comment lister tous les types de fichiers dans votre dossier actuel :
import glob
for x in glob.glob():
print(x)
voici comment lister tous (par exemple) les fichiers .txt de votre dossier actuel :
import glob
for x in glob.glob('*.txt'):
print(x)
voici comment lister tous les types de fichiers dans un répertoire choisi :
import glob
for x in glob.glob('C:/example/hi/hello/'):
print(x)
j'espère que cela vous a aidé
Module os
fournit un moyen de trouver le chemin des abdominaux.
MAIS la plupart des chemins sous Linux commencent par ~
(tilde), ce qui ne donne pas un résultat satisfaisant.
pour que tu puisses utiliser srblib
pour ça.
>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'
installez-le en utilisant python3 -m pip install srblib
si tu es sur mac
import os
upload_folder = os.path.abspath("static/img/users")
cela vous donnera un chemin complet :
print(upload_folder)
affichera le chemin suivant :
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user
Si quelqu'un utilise Python et Linux et recherche le chemin complet du fichier :
>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file
Ce toujours obtient le bon nom de fichier du script actuel, même lorsqu'il est appelé depuis un autre script.C'est particulièrement utile lors de l'utilisation subprocess
.
import sys,os
filename = sys.argv[0]
à partir de là, vous pouvez obtenir le chemin complet du script avec :
>>> os.path.abspath(filename)
'/foo/bar/script.py'
Il facilite également la navigation dans les dossiers en ajoutant simplement /..
autant de fois que vous le souhaitez pour monter dans la hiérarchie des répertoires.
Pour obtenir le cwd :
>>> os.path.abspath(filename+"/..")
'/foo/bar'
Pour le chemin parent :
>>> os.path.abspath(filename+"/../..")
'/foo'
En combinant "/.."
avec d'autres noms de fichiers, vous pouvez accéder à n'importe quel fichier du système.
filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)