Récupère le parent du répertoire courant à partir du script Python
Je veux obtenir le parent du répertoire courant à partir du script Python. Par exemple, je lance le script à partir de /home/kristina/desire-directory/scripts
le chemin de désir dans ce cas est /home/kristina/desire-directory
Je sais sys.path[0]
à partir de sys
. Mais je ne veux pas analyser sys.path[0]
chaîne résultante. Existe-t-il un autre moyen d'obtenir le parent du répertoire courant en Python?
5 réponses
Utilisation du système d'exploitation.chemin
Pour obtenir le répertoire parent du répertoire contenant le script (quel que soit le répertoire de travail actuel), vous devrez utiliser __file__
.
Dans le script, l'utilisation os.path.abspath(__file__)
pour obtenir le chemin absolu du script, et de les appeler os.path.dirname
deux fois:
from os.path import dirname, abspath
d = dirname(dirname(abspath(__file__))) # /home/kristina/desire-directory
Fondamentalement, vous pouvez parcourir l'arborescence des répertoires en appelant os.path.dirname
autant de fois que nécessaire. Exemple:
In [4]: from os.path import dirname
In [5]: dirname('/home/kristina/desire-directory/scripts/script.py')
Out[5]: '/home/kristina/desire-directory/scripts'
In [6]: dirname(dirname('/home/kristina/desire-directory/scripts/script.py'))
Out[6]: '/home/kristina/desire-directory'
Si vous voulez obtenir le parent répertoire du répertoire de travail courant, utiliser os.getcwd
:
import os
d = os.path.dirname(os.getcwd())
Utilisation de pathlib
, Vous pouvez également utiliser la pathlib
module (disponible en Python 3.4 ou plus récent).
Chaque instance pathlib.Path
possède l'attribut parent
faisant référence au répertoire parent, ainsi que l'attribut parents
, qui est une liste des ancêtres du chemin. Path.resolve
peut être utilisé pour obtenir le chemin d'accès absolu. Il résout également tous les liens symboliques, mais vous pouvez utiliser Path.absolute
à la place si ce n'est pas un comportement désiré.
Path(__file__)
et Path()
représentent respectivement le chemin du script et le répertoire de travail en cours, donc pour obtenir le répertoire parent du répertoire de script (quel que soit le répertoire de travail en cours), vous utiliseriez
from pathlib import Path
# `path.parents[1]` is the same as `path.parent.parent`
d = Path(__file__).resolve().parents[1] # Path('/home/kristina/desire-directory')
Et de obtenir le répertoire parent du répertoire de travail courant
from pathlib import Path
d = Path().resolve().parent
Notez que d
est une instance Path
, ce qui n'est pas toujours pratique. Vous pouvez le convertir en str
facilement quand vous en avez besoin:
In [15]: str(d)
Out[15]: '/home/kristina/desire-directory'
Cela a fonctionné pour moi (je suis sur Ubuntu):
import os
os.path.dirname(os.getcwd())
import os
current_file = os.path.abspath(os.path.dirname(__file__))
parent_of_parent_dir = os.path.join(current_file, '../../')
Vous pouvez utiliser Path.parent
à partir du module pathlib
:
from pathlib import Path
# ...
Path(__file__).parent
Vous pouvez utiliser plusieurs appels à parent
pour aller plus loin dans le chemin d'accès:
Path(__file__).parent.parent
from os.path import dirname
from os.path import abspath
def get_file_parent_dir_path():
"""return the path of the parent directory of current file's directory """
current_dir_path = dirname(abspath(__file__))
path_sep = os.path.sep
components = current_dir_path.split(path_sep)
return path_sep.join(components[:-1])