Question Trouver le répertoire actuel et le répertoire du fichier [dupliquer]


Cette question a déjà une réponse ici:

En Python, quelles commandes puis-je utiliser pour trouver:

  1. le répertoire courant (où j'étais dans le terminal lorsque j'ai exécuté le script Python), et
  2. où le fichier que j'exécute est?

1493
2018-02-28 01:51


origine


Réponses:


Pour obtenir le chemin d'accès complet au répertoire dans lequel se trouve un fichier Python, écrivez ceci dans ce fichier:

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))

(Notez que l'incantation ci-dessus ne fonctionnera pas si vous avez déjà utilisé os.chdir() pour changer votre répertoire de travail actuel, puisque la valeur de __file__ La constante est relative au répertoire de travail actuel et n'est pas modifiée par un os.chdir() appel.)


Pour obtenir l'utilisation actuelle du répertoire de travail

import os
cwd = os.getcwd()

Références de documentation pour les modules, constantes et fonctions utilisés ci-dessus:

  • le os et os.path modules.
  • le __file__ constant
  • os.path.realpath(path) (résultats "le chemin canonique du nom de fichier spécifié, en éliminant les liens symboliques rencontrés dans le chemin")
  • os.path.dirname(path) (résultats "le nom du répertoire de pathname path")
  • os.getcwd() (résultats "une chaîne représentant le répertoire de travail courant")
  • os.chdir(path) ("changer le répertoire de travail actuel pour path")

2263
2018-02-28 01:54



Répertoire de travail actuel: os.getcwd ()

Et le Attribut __file__  peut vous aider à trouver où se trouve le fichier que vous exécutez. Cet article explique tout: Comment obtenir le chemin du fichier en cours d'exécution en Python?


271
2018-02-28 01:53



Vous pouvez trouver ceci utile comme référence:

import os

print("Path at terminal when executing this file")
print(os.getcwd() + "\n")

print("This file path, relative to os.getcwd()")
print(__file__ + "\n")

print("This file full path (following symlinks)")
full_path = os.path.realpath(__file__)
print(full_path + "\n")

print("This file directory and name")
path, filename = os.path.split(full_path)
print(path + ' --> ' + filename + "\n")

print("This file directory only")
print(os.path.dirname(full_path))

225
2017-12-05 10:18



1.Pour obtenir le chemin complet du répertoire courant

    >>import os
    >>print os.getcwd()

o / p: "C: \ Utilisateurs \ admin \ monfichier"

1.Pour obtenir le nom du dossier de répertoire actuel seul

    >>import os
    >>str1=os.getcwd()
    >>str2=str1.split('\\')
    >>n=len(str2)
    >>print str2[n-1]

o / p: "mon dossier"


47
2018-04-24 07:00



Si vous essayez de trouver le répertoire actuel du fichier dans lequel vous vous trouvez:

Manière agnostique OS:

dirname, filename = os.path.split(os.path.abspath(__file__))

33
2017-10-07 09:10



Répondez à # 1:

Si vous voulez le répertoire actuel, faites ceci:

import os
os.getcwd()

Si vous voulez juste n'importe quel nom de dossier et vous avez le chemin d'accès à ce dossier, faites ceci:

def get_folder_name(folder):
    '''
    Returns the folder name, given a full folder path
    '''
    return folder.split(os.sep)[-1]

Répondez à # 2:

import os
print os.path.abspath(__file__)

26
2017-11-05 09:31



Un peu en retard à la fête, mais je pense que la façon la plus succincte de trouver juste le nom de votre contexte d'exécution actuel serait

current_folder_path, current_folder_name = os.path.split(os.getcwd())

25
2017-10-09 10:31



Si vous utilisez Python 3.4, il y a le tout nouveau niveau supérieur pathlib module qui vous permet d'appeler facilement pathlib.Path.cwd() pour obtenir un Path objet représentant votre répertoire de travail actuel, ainsi que de nombreuses autres nouvelles fonctionnalités.

Plus d'informations sur cette nouvelle API peuvent être trouvées ici.


24
2018-02-20 20:32



pathlib module, introduit en Python 3.4 (PEP 428 - Le module pathlib - chemins de système de fichiers orientés objet), rend beaucoup plus agréable l'expérience liée au cheminement.

$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
    ├── 1.py
    └── 2.py

Afin d'obtenir l'utilisation actuelle du répertoire de travail Path.cwd():

from pathlib import Path

print(Path.cwd())  # /home/skovorodkin/stack

Pour obtenir un chemin absolu vers votre fichier de script, utilisez Path.resolve() méthode:

print(Path(__file__).resolve())  # /home/skovorodkin/stack/scripts/1.py

Et pour obtenir le chemin d'un répertoire où se trouve votre script, accédez .parent(il est recommandé d'appeler .resolve() avant .parent):

print(Path(__file__).resolve().parent)  # /home/skovorodkin/stack/scripts

Souviens toi que __file__ n'est pas fiable dans certaines situations: Comment obtenir le chemin du fichier en cours d'exécution en Python?.


S'il vous plaît noter que Path.cwd(), Path.resolve() et autre Path méthodes retournent des objets de chemin (PosixPath dans mon cas), pas de cordes. En Python 3.4 et 3.5 qui a causé une certaine douleur, parce que open fonction intégrée ne pouvait fonctionner qu'avec des objets string ou bytes, et ne supportait pas Path objets, de sorte que vous deviez convertir Path objets à cordes ou à utiliser Path.open() méthode, mais la dernière option vous obligeait à changer l'ancien code:

$ cat scripts/2.py
from pathlib import Path

p = Path(__file__).resolve()

with p.open() as f: pass
with open(str(p)) as f: pass
with open(p) as f: pass

print('OK')

$ python3.5 scripts/2.py
Traceback (most recent call last):
  File "scripts/2.py", line 11, in <module>
    with open(p) as f:
TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')

Comme vous pouvez le voir open(p) ne fonctionne pas avec Python 3.5.

PEP 519 - Ajout d'un protocole de chemin de système de fichiers, implémenté dans Python 3.6, ajoute le support de PathLike objets à open fonction, alors maintenant vous pouvez passer Path objets à open fonctionner directement:

$ python3.6 scripts/2.py
OK

20
2017-09-05 19:14