web-dev-qa-db-fra.com

Obtenir le parent du répertoire en cours à partir d'un script Python

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?

27

Utiliser os.path

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())

Utiliser pathlib

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'
56
vaultah

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

import os
os.path.dirname(os.getcwd())
6
akashbw
import os
current_file = os.path.abspath(os.path.dirname(__file__))
parent_of_parent_dir = os.path.join(current_file, '../../')
5
corvid

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
4
Gavriel Cohen

'..' renvoie le parent du répertoire en cours.

import os
os.chdir('..')

Votre répertoire actuel sera maintenant /home/kristina/desire-directory.

0
Marcin
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
beingzy