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"
Était-ce utile?

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

https://pypi.org/project/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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top