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))
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.
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.
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`