Étant donné un chemin tel que "mydir/myfile.txt"
, comment puis-je 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"
Réponses:
Fonctionne également s'il s'agit déjà d'un chemin absolu:
la source
normpath()
comme suit:normpath(join(os.getcwd(), path))
. Donc, simydir/myfile.txt
ce n'est pas le casos.getcwd()
, le chemin absolu n'est pas le vrai chemin .mydir/myfile.txt
réfère implicitement à un chemin à l'intérieur du répertoire de travail actuel comme étant donc équivalent à./mydir/myfile.txt
. Ce n'est peut-être pas le chemin que vous aviez l'intention de saisir, mais cela semble être l'interprétation correcte du chemin pour autant que je sache. Pourriez-vous élaborer?abspath
fonction et un vrai fichier. Vous pouvez donner n'importe quel nom de fichier inexistant et les hiérarchies de répertoires sont correctes et abspath résoudra simplement les bits du chemin (y compris l'..
élément " " du répertoire parent ) et renverra une chaîne. Ceci est juste une chaîne calculée à partir du répertoire courant; toute corrélation avec un fichier réel est accidentelle, semble-t-il. Essayezos.path.abspath("/wow/junk/../blha/hooey")
. Ça marche.os.path.exists
. Au contraire, des systèmes comme PowerShell qui insistent sur le chemin existant avec la fonction de résolution de chemin standard sont pénibles à utiliser.relpath
path
relpath
Vous pouvez utiliser la nouvelle bibliothèque Python 3.4
pathlib
. (Vous pouvez également l'obtenir pour Python 2.6 ou 2.7 en utilisantpip install pathlib
.) Les auteurs ont é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 dessus."Pour obtenir un chemin absolu dans Windows:
Ou sous UNIX:
Les documents sont ici: https://docs.python.org/3/library/pathlib.html
la source
os.path.abspath()
m'a donné une erreur :, l'AttributeError: 'NoneType' object has no attribute 'startswith'
utilisationPath().resolve()
n'a pas le même chemin de fichier relatif. (Linux et Python3.4)Mieux encore, installez le module (trouvé sur
PyPI
), il encapsule toutes lesos.path
fonctions et autres fonctions associées dans des méthodes sur un objet qui peut être utilisé partout où des chaînes sont utilisées:la source
pathlib
. Voir ma réponse dans ce fil.from path import Path
alorsPath('mydir/myfile.txt').abspath()
path
module différent . Le module lié utilise une classe nomméepath
.Aujourd'hui, vous pouvez également utiliser le
unipath
package basé surpath.py
: http://sluggo.scrapping.cc/python/unipath/Je recommanderais d'utiliser ce package car il offre une interface propre aux utilitaires os.path courants .
la source
Mise à jour pour Python 3.4+
pathlib
qui répond réellement à la question:Si vous n'avez besoin que d'une chaîne temporaire, gardez à l'esprit que vous pouvez utiliser des
Path
objets avec toutes les fonctions pertinentes dansos.path
, y compris bien sûrabspath
:la source
Notez que cela
expanduser
est nécessaire (sous Unix) dans le cas où l'expression donnée pour le nom et l'emplacement du fichier (ou répertoire) peut contenir un interligne~/
(le tilde fait référence au répertoire personnel de l'utilisateur) etexpandvars
prend en charge toutes les autres variables d'environnement (comme$HOME
).la source
Cela obtient toujours le bon nom de fichier du script actuel, même lorsqu'il est appelé à partir d'un autre script. Il est particulièrement utile lors de l'utilisation
subprocess
.à partir de là, vous pouvez obtenir le chemin complet du script avec:
Il facilite également la navigation dans les dossiers en ajoutant simplement
/..
autant de fois que vous le souhaitez pour remonter dans la hiérarchie des répertoires.Pour obtenir le cwd:
Pour le chemin parent:
En combinant
"/.."
avec d'autres noms de fichiers, vous pouvez accéder à n'importe quel fichier du système.la source
Le module
os
fournit un moyen de trouver le chemin abs.MAIS la plupart des chemins sous Linux commencent par
~
(tilde), ce qui ne donne pas un résultat satisfaisant.afin que vous puissiez l'utiliser
srblib
pour cela.installez-le en utilisant
python3 -m pip install srblib
https://pypi.org/project/srblib/
la source
Je préfère utiliser glob
voici comment répertorier tous les types de fichiers dans votre dossier actuel:
voici comment lister tous (par exemple) les fichiers .txt de votre dossier actuel:
voici comment lister tous les types de fichiers dans un répertoire choisi:
j'espère que cela vous a aidé
la source
os.path.abspath()
) à tout chemin relatifglob
prévu pour vos deux premiers cas ...si vous êtes sur un mac
cela vous donnera un chemin complet:
affichera le chemin suivant:
la source
Dans le cas où quelqu'un utilise python et linux et cherche le chemin complet du fichier:
la source