Je veux obtenir le parent du répertoire courant à partir d'un script Python. Par exemple, je lance le script à partir de /home/kristina/desire-directory/scripts
le chemin souhaité est dans ce cas /home/kristina/desire-directory
Je connais sys.path[0]
de sys
. Mais je ne veux pas analyser la chaîne résultante sys.path[0]
. Existe-t-il un autre moyen d’obtenir le parent du répertoire courant en Python?
Pour obtenir le répertoire parent du répertoire contenant le script (quel que soit le répertoire de travail en cours), vous devez utiliser __file__
.
Dans le script, utilisez os.path.abspath(__file__)
pour obtenir le chemin absolu du script et appelez os.path.dirname
deux fois:
from os.path import dirname, abspath
d = dirname(dirname(abspath(__file__))) # /home/kristina/desire-directory
En gros, vous pouvez accéder à l’arborescence 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 répertoire parent du répertoire de travail actuel, utilisez os.getcwd
:
import os
d = os.path.dirname(os.getcwd())
Vous pouvez également utiliser le module pathlib
(disponible dans 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 absolu. Il résout également tous les liens symboliques, mais vous pouvez utiliser Path.absolute
si ce n'est pas le comportement souhaité.
Path(__file__)
et Path()
représentent respectivement le chemin du script et le répertoire de travail actuel. Par conséquent, pour obtenir le répertoire parent du répertoire de script (quel que soit le répertoire de travail actuel),
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 à obtenir le répertoire parent du répertoire de travail actuel
from pathlib import Path
d = Path().resolve().parent
Notez que d
est une instance Path
, qui n'est pas toujours pratique. Vous pouvez le convertir en str
facilement lorsque 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:
Path(__file__).parent.parent
'..'
renvoie le parent du répertoire en cours.
import os
os.chdir('..')
Votre répertoire actuel sera maintenant /home/kristina/desire-directory
.
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])