En Python, quelles commandes puis-je utiliser pour trouver:
Pour obtenir le chemin complet du répertoire contenant un fichier Python, écrivez-le 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 modifier votre répertoire de travail actuel, car la valeur de la constante ___file__
_ est relative au répertoire de travail actuel et n'est pas modifiée par un appel os.chdir()
. .)
Pour obtenir le répertoire de travail actuel, utilisez
_import os
cwd = os.getcwd()
_
Références de la documentation pour les modules, constantes et fonctions utilisées ci-dessus:
os
et os.path
.__file__
constantos.path.realpath(path)
(renvoie "le chemin canonique du nom de fichier spécifié, en éliminant les liens symboliques rencontrés dans le chemin" )os.path.dirname(path)
(renvoie "le nom du répertoire du chemin path
" )os.getcwd()
(renvoie "une chaîne représentant le répertoire de travail actuel" )os.chdir(path)
( "change le répertoire de travail actuel en path
" )Répertoire de travail actuel: os.getcwd()
Et le attribut __file__
peut vous aider à localiser le fichier que vous exécutez. Ce SO post explique tout: Comment obtenir le chemin du fichier actuellement exécuté en Python?
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))
pathlib
module, introduit dans Python 3.4 ( PEP 428 - Le module pathlib - chemins d'accès au système de fichiers orienté objet ), rend expérience sur le chemin beaucoup beaucoup mieux.
_$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
├── 1.py
└── 2.py
_
Pour obtenir le répertoire de travail actuel, utilisez Path.cwd()
:
_from pathlib import Path
print(Path.cwd()) # /home/skovorodkin/stack
_
Pour obtenir un chemin absolu vers votre fichier de script, utilisez la méthode Path.resolve()
:
_print(Path(__file__).resolve()) # /home/skovorodkin/stack/scripts/1.py
_
Et pour obtenir le chemin d’un répertoire dans lequel 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 actuellement exécuté en Python? .
Veuillez noter que Path.cwd()
, Path.resolve()
et les autres méthodes Path
renvoient des objets de chemin ( PosixPath
dans mon cas), et non des chaînes. Dans Python 3.4 et 3.5, cela posait problème, car open
la fonction intégrée ne pouvait fonctionner qu'avec des objets chaîne ou octets, et ne supportait pas les objets Path
; vous deviez donc convertir Path
objets en chaînes ou utilisez la méthode Path.open()
, 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 constater, 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 la prise en charge de PathLike
objets à open
fonction Alors maintenant, vous pouvez passer les objets Path
à la fonction open
directement:
_$ python3.6 scripts/2.py
OK
_
1.Pour obtenir le chemin complet du répertoire actuel
>>import os
>>print os.getcwd()
o/p: "C:\Utilisateurs\admin\mon dossier"
1.Pour obtenir le nom du dossier du répertoire actuel uniquement
>>import os
>>str1=os.getcwd()
>>str2=str1.split('\\')
>>n=len(str2)
>>print str2[n-1]
o/p: "mon dossier"
Si vous essayez de trouver le répertoire actuel du fichier dans lequel vous vous trouvez actuellement:
Manière agnostique OS:
dirname, filename = os.path.split(os.path.abspath(__file__))
Si vous utilisez Python 3.4, le tout nouveau module pathlib
de niveau supérieur vous permet d'appeler facilement 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 .
Réponse à # 1:
Si vous voulez le répertoire actuel, procédez comme suit:
import os
os.getcwd()
Si vous voulez juste un nom de dossier et que vous avez le chemin d'accès à ce dossier, procédez comme suit:
def get_folder_name(folder):
'''
Returns the folder name, given a full folder path
'''
return folder.split(os.sep)[-1]
Réponse à la question 2:
import os
print os.path.abspath(__file__)
Un peu tard pour le parti, mais je pense que la façon la plus succincte de trouver le nom de votre contexte d’exécution actuel serait:
current_folder_path, current_folder_name = os.path.split(os.getcwd())
Pathlib peut être utilisé de cette façon pour obtenir le répertoire contenant le script actuel:
import pathlib
filepath = pathlib.Path(__file__).resolve().parent
Pour obtenir le chemin complet du répertoire actuel:
os.path.realpath ('.')
Si vous recherchez l'emplacement du script en cours d'exécution, vous pouvez utiliser sys.argv[0]
pour obtenir le chemin complet.
Afin de voir le type de répertoire de travail actuel, le 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, car sys.argv
est immuable et renvoie donc toujours le fichier actuel (chemin d'objet du module) et n'est pas affecté par os.chdir()
. Aussi, vous pouvez faire comme ça:
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 fonctionnera bizarre une fois compilé par PyInstaller car les propriétés magiques ne sont pas définies dans le niveau __main__
et sys.argv[0]
est la façon dont votre exe a été appelé. devient affecté par le répertoire de travail).
Pour obtenir votre répertoire de travail en python. Vous pouvez utiliser le code suivant:
import os
cwd = os.getcwd() #to get current working directory
print(cwd)