如何使用 Python pathlib 更改目录

How can I change directory with Python pathlib

使用 Python pathlib (Documentation) 功能更改目录的预期方法是什么?

假设我创建了一个 Path 对象,如下所示:

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

目前我只知道以下内容,但这似乎破坏了pathlib的想法。

import os
os.chdir(str(path))

根据评论,我意识到 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)

一个好的替代方法是使用 subprocess.Popen class 的 cwd 参数,如 answer.

如果您使用 Python <3.6 并且 path 实际上是一个 pathlib.Path,您需要 str(path)chdir 语句中。

在Python 3.6 或更高版本中,os.chdir() 可以直接处理Path 对象。事实上,Path 对象可以替换标准库中的大多数 str 路径。

os.chdir(path) Change the current working directory to path.

This function can support specifying a file descriptor. The descriptor must refer to an opened directory, not an open file.

New in version 3.3: Added support for specifying path as a file descriptor on some platforms.

Changed in version 3.6: Accepts a path-like object.

import os
from pathlib import Path

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

这可能有助于将来不必与 3.5 或更低版本兼容的项目。

如果您不介意使用 a third-party library:

$ 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. 

或者如果您想在没有 context manager 的情况下执行此操作:

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