web-dev-qa-db-fra.com

Comment puis-je changer de répertoire avec Python pathlib

Quelle est la manière prévue de changer de répertoire en utilisant la fonctionnalité Python pathlib(Documentation) ?

Supposons que je crée un objet Path comme suit:

from pathlib import Path
path = Path('/etc')

Actuellement, je sais juste ce qui suit, mais cela semble saper l'idée de pathlib.

import os
os.chdir(str(path))
21
Lukas

Sur la base des commentaires, j'ai réalisé que pathlib n'aide pas à changer de répertoire et que les changements de répertoire devraient être évités si possible.

Étant donné que j'avais besoin d'appeler des scripts bash en dehors de Python à partir du bon répertoire, j'ai opté pour l'utilisation d'un gestionnaire de contexte pour une manière plus propre de changer les répertoires similaires à ceci réponse :

import os
import contextlib
from pathlib import Path

@contextlib.contextmanager
def working_directory(path):
    """Changes working directory and returns to previous on exit."""
    prev_cwd = Path.cwd()
    os.chdir(path)
    try:
        yield
    finally:
        os.chdir(prev_cwd)

Une bonne alternative est d'utiliser le paramètre cwd de la classe subprocess.Popen Comme dans cette réponse .

Si vous utilisez Python <3.6 et path est en fait un pathlib.Path, Vous avez besoin de str(path) dans le chdir déclarations.

12
Lukas

Dans le Python 3.6 ou supérieur, os.chdir() peut traiter directement avec Path objet. En fait, l’objet Path peut remplacer la plupart des str chemins dans les bibliothèques standard.

os. chdir (path) Remplacez le répertoire de travail actuel par path.

Cette fonction peut prendre en charge la spécification d'un descripteur de fichier. Le descripteur doit faire référence à un répertoire ouvert et non à un fichier ouvert.

Nouveau dans la version 3.3: Ajout de la prise en charge de la spécification du chemin comme descripteur de fichier sur certaines plates-formes.

Modifié dans la version 3.6: Accepte un objet semblable à un chemin .

import os
from pathlib import Path

path = Path('/etc')
os.chdir(path)

Cela peut aider dans les futurs projets qui ne doivent pas être compatibles avec la version 3.5 ou inférieure.

4
Yan QiDong

Si cela ne vous dérange pas d'utiliser ne bibliothèque tierce :

$ pip install path

puis:

from path import Path

with Path("somewhere"):
    # current working directory is now `somewhere`
    ...
# current working directory is restored to its original value. 

ou si vous voulez le faire sans le gestionnaire de contexte :

Path("somewhere").cd()
# current working directory is now changed to `somewhere`
0
AXO