2017-01-19 8 views
6

Python pathlib(Documentation)機能を使用してディレクトリを変更する方法は何ですか?Pythonパスライブラリでディレクトリを変更する方法

は、次のように私はPathオブジェクトを作成するとしましょう:

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

現在、私はちょうど次のことを知っているが、それはpathlibのアイデアを損なうようです。私はpathlibはディレクトリを変更手助けし、可能な場合は、ディレクトリの変更は避けるべきであることをしないことに気づいたコメントに基づいて

import os 
os.chdir(str(path)) 
+0

現在のディレクトリを変更することはめったに良いことではありません。なぜディレクトリを変更する必要がありますか? –

+0

Pythonで書き直したい小さなbashスクリプトがあります。そうすれば、外部のbashスクリプトを呼び出すよりも簡単にエラーを処理できます。 – Lukas

+0

'pathlib'を使用する必要はありません。' os.chdir( '/ etc') ' – furas

答えて

5

私は正しいディレクトリからのPythonの外のbashスクリプトを呼び出すために必要なので、私はこのanswerに似たディレクトリを変更するクリーンな方法のためのコンテキストマネージャを使用するために選んだ:

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) 

良い代替にありますこのanswerのように、subprocess.Popenクラスのcwdパラメータを使用します。

あなたは、Python 3.6 <使用しているとpathが実際pathlib.Pathある場合は、chdir文でstr(path)必要です。

1

Python 3.6以降では、os.chdir()Pathオブジェクトを直接扱うことができます。実際、Pathオブジェクトは、標準ライブラリのほとんどのstrパスを置き換えることができます。

os。 chdir(パス)現在の作業ディレクトリをpathに変更します。

この関数は、ファイル記述子の指定をサポートできます。記述子 は、開いているファイルではなく、開いているディレクトリを参照する必要があります。

バージョン3.3で追加されました:一部のプラットフォームでは、ファイル の記述子としてパスを指定するサポートが追加されました。

バージョン3.6で変更されました:path-like objectを受け入れます。

import os 
from pathlib import Path 

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

これは、以下の3.5と互換性がある必要はありません将来のプロジェクトに役立つかもしれません。

+0

はい、それは本当に素晴らしいです。私はPythonコミュニティがどこでも 'pathlib.Path'を受け入れるか、それを完全に放棄することを願っています。 – Lukas

関連する問題