Trouver répertoire courant et le répertoire du fichier [dupliquer]

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

  • comment déterminer correctement le répertoire de script actuel? 13 Réponses
  • Comment savoir/changer de répertoire courant en Python shell? 6 réponses

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

  1. le répertoire courant( où j'étais dans le terminal quand J'ai lancé le script Python), et
  2. où est le fichier que j'exécute?
1565
demandé sur Mark Amery 2011-02-28 04:51:21

15 réponses

pour obtenir le chemin complet du répertoire dans lequel un fichier Python est contenu, é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 courant, puisque la valeur de la constante __file__ est relative au répertoire courant et n'est pas modifiée par un appel os.chdir() .)


pour obtenir le courant de travail l'utilisation de répertoire

import os
cwd = os.getcwd()

références documentaires pour les modules, les constantes et les fonctions utilisés ci-dessus:

2397
répondu Russell Dias 2016-07-31 12:34:02

Répertoire de Travail Courant: os.getcwd ()

et l'attribut ___ file_ _ peuvent vous aider à trouver où se trouve le fichier que vous exécutez. Cet article explique tout: Comment puis-je obtenir le chemin du fichier en cours d'exécution en Python?

272
répondu Nix 2017-05-23 11:47:29

vous pouvez le trouver 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))
229
répondu Daniel Reis 2015-11-13 14:16:53

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

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

o/p: "C: \Users\admin\myfolder"

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

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

o/p:"mondossier"

47
répondu vinithravit 2012-04-24 07:00:16

Si vous essayez de trouver le répertoire courant du fichier que vous êtes actuellement:

OS de façon agnostique:

dirname, filename = os.path.split(os.path.abspath(__file__))
33
répondu Kurt 2013-07-07 21:10:18

réponse à #1:

si vous voulez le répertoire courant, faites ceci:

import os
os.getcwd()

si vous voulez n'importe quel nom de dossier et que vous avez le chemin vers 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éponse à #2:

import os
print os.path.abspath(__file__)
26
répondu Blairg23 2016-12-15 00:08:10

un peu en retard pour le parti, mais je pense que le moyen le plus succinct pour trouver juste le nom de votre contexte d'exécution actuelle serait

current_folder_path, current_folder_name = os.path.split(os.getcwd())
25
répondu StormShadow 2013-10-09 10:31:39

si vous utilisez Python 3.4, il y a le tout nouveau module supérieur pathlib qui vous permet d'appeler commodément pathlib.Path.cwd() pour obtenir un objet Path 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
répondu Jazzer 2017-02-23 15:12:21

pathlib module, introduit dans Python 3.4 ( PEP 428 - the pathlib module - object-oriented filesystem pathways ), rend l'expérience liée au chemin beaucoup mieux.

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

afin d'obtenir l'utilisation courante 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

rappelez-vous que __file__ n'est pas fiable dans certaines situations: Comment obtenir le chemin du fichier courant exécuté en Python? .


s'il vous Plaît noter, que Path.cwd() , Path.resolve() et autres Path méthodes retournent des objets de chemin de ( PosixPath dans mon cas), pas de chaînes. 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, donc vous avez dû convertir Path objets en cordes ou utiliser Path.open() Méthode , mais cette 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é en Python 3.6, ajoute le support de PathLike objets à open fonction, donc maintenant vous pouvez passer Path objets à open fonction directement:

$ python3.6 scripts/2.py
OK
23
répondu skovorodkin 2018-03-17 20:02:39

si vous cherchez l'emplacement du script actuellement exécuté, vous pouvez utiliser sys.argv[0] pour obtenir le chemin complet.

17
répondu Grochni 2015-10-18 03:03:11

pour obtenir le chemin complet du répertoire courant:

os.chemin.la fonction realpath('.')

16
répondu Ilia S. 2015-09-22 08:18:26

Pathlib peut être utilisé de cette façon pour obtenir le répertoire contenant le script courant:

import pathlib
filepath = pathlib.Path(__file__).resolve().parent
14
répondu Mathieu C. 2016-09-29 13:07:54

pour voir le répertoire de travail actuel, tapez script suivant:

import os
current_working_directory = os.getcwd()
6
répondu Mohammad Hassan 2018-04-08 16:45:46

pour la question 1, utilisez os.getcwd() # get working dir et os.chdir(r'D:\Steam\steamapps\common') # set working dir


je recommande d'utiliser sys.argv[0] pour la question 2 parce que sys.argv est immuable et retourne donc toujours le fichier courant (chemin d'objet du module) et non affecté par os.chdir() . Vous pouvez aussi faire comme ceci:

import os
this_py_file = os.path.realpath(__file__)

# vvv Below comes your code vvv #

mais cet extrait et sys.argv[0] ne fonctionnera pas ou ne fonctionnera pas lorsqu'il est compilé par PyInstaller parce que les propriétés magiques ne sont pas définis dans le niveau __main__ et sys.argv[0] est la façon dont votre exe a été appelé (signifie qu'il est affecté par le dir de travail).

5
répondu Vladislav Toncharov 2017-09-20 05:46:46

pour obtenir votre répertoire de travail en python. Vous pouvez utiliser le code suivant:

importer os cwd = os.getcwd() #pour Obtenir le répertoire de travail

4
répondu Nirali Khoda 2018-09-20 10:38:42