web-dev-qa-db-ja.com

Python pathlibでディレクトリを変更するにはどうすればよいですか?

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

次のようにPathオブジェクトを作成するとします。

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

現在、私は次のことを知っていますが、それはpathlibの考えを損なうようです。

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

コメントに基づいて、pathlibはディレクトリの変更に役立たず、可能であればディレクトリの変更を回避する必要があることに気付きました。

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)が必要です。

12
Lukas

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以下との互換性が不要な将来のプロジェクトで役立つ場合があります。

4
Yan QiDong

サードパーティライブラリ を使用してもかまわない場合:

$ pip install path

次に:

from path import Path

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

または コンテキストマネージャ なしで実行する場合:

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