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:
- le répertoire courant( où j'étais dans le terminal quand J'ai lancé le script Python), et
- où est le fichier que j'exécute?
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:
-
os
etos.path
modules. - Le
__file__
constante -
os.path.realpath(path)
(retourne " le chemin canonique du nom de fichier spécifié, éliminant tout lien symbolique rencontré dans le chemin " ) -
os.path.dirname(path)
(retourne "le nom du répertoire de pathnamepath
" ) -
os.getcwd()
(retourne "une chaîne représentant le répertoire courant de travail" ) -
os.chdir(path)
( "changer le répertoire de travail en cours àpath
" )
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?
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))
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"
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__))
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__)
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())
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 .
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
si vous cherchez l'emplacement du script actuellement exécuté, vous pouvez utiliser sys.argv[0]
pour obtenir le chemin complet.
pour obtenir le chemin complet du répertoire courant:
os.chemin.la fonction realpath('.')
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
pour voir le répertoire de travail actuel, tapez script suivant:
import os
current_working_directory = os.getcwd()
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).
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