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?

26
demandé sur vaultah 2015-05-13 18:07:34

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'
48
répondu vaultah 2016-09-30 21:32:57

Cela a fonctionné pour moi (je suis sur Ubuntu):

import os
os.path.dirname(os.getcwd())
6
répondu akashbw 2016-04-29 13:10:57
import os
current_file = os.path.abspath(os.path.dirname(__file__))
parent_of_parent_dir = os.path.join(current_file, '../../')
4
répondu corvid 2015-05-13 15:51:49

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
4
répondu Gavriel Cohen 2016-09-21 14:41:47
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])
0
répondu beingzy 2016-03-10 16:54:45