2857 votes

Trouver le répertoire actuel et le répertoire du fichier

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

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

4460voto

Russell Dias Points 17162

Pour obtenir le chemin complet du 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é l'option os.chdir() pour modifier votre répertoire de travail actuel, puisque la valeur de la balise __file__ est relative au répertoire de travail actuel et n'est pas modifiée par une commande os.chdir() appel.)


Pour obtenir le répertoire de travail actuel, utilisez

import os
cwd = os.getcwd()

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

  • El os y os.path modules.
  • El __file__ constant
  • os.path.realpath(path) (retours "le chemin canonique du nom de fichier spécifié, en éliminant tous les liens symboliques rencontrés dans le chemin". )
  • os.path.dirname(path) (retours "le nom du répertoire du chemin d'accès path " )
  • os.getcwd() (retours "une chaîne représentant le répertoire de travail actuel" )
  • os.chdir(path) ( "changer le répertoire de travail actuel en path " )

189 votes

Je déteste quand j'utilise ça pour ajouter à sys.path. Je me sens tellement sale en ce moment.

12 votes

fichier ne fonctionnera pas si elle est invoquée depuis un IDE (disons IDLE). Suggérez os.path.realpath('./') ou os.getcwd(). La meilleure réponse se trouve ici : stackoverflow.com/questions/2632199/

3 votes

@Neon22 pourrait répondre à certains besoins, mais je pense qu'il faut noter que ces choses ne sont pas du tout les mêmes - les fichiers peuvent être en dehors du répertoire de travail.

371voto

Nix Points 22944

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

Et le __file__ attribut peut vous aider à trouver l'emplacement du fichier que vous exécutez. Ce post de Stack Overflow explique tout : Comment obtenir le chemin du fichier en cours d'exécution en Python ?

345voto

Daniel Reis Points 3351

Vous pouvez trouver cela 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))

12 votes

Que fait __file__ signifie ici ? Cela ne fonctionne pas pour moi.

13 votes

El __file__ est un attribut de l'objet module. Vous devez exécuter le code dans un fichier Python, pas dans le REPL.

75voto

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

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

    Sortie : "C : \Users\admin\myfolder "

  2. Pour obtenir le nom du dossier du répertoire courant seul

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

    Sortie : "mon dossier"

12 votes

Il vaut mieux le faire en une seule ligne, je pense : os.getcwd().split('\\')[-1]

59 votes

Il est préférable d'utiliser os.sep plutôt que le code dur pour Windows : os.getcwd().split(os.sep)[-1]

6 votes

Le problème avec cette approche est que si vous exécutez le script à partir d'un répertoire différent, vous obtiendrez le nom de ce répertoire au lieu de celui des scripts, ce qui peut ne pas être ce que vous voulez.

42voto

Kurt Points 171

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

de manière agnostique par rapport au système d'exploitation :

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

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