如何使用Python pathlib更改目录

时间:2017-01-19 12:55:19

标签: python pathlib

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

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

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

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

import os
os.chdir(str(path))

3 个答案:

答案 0 :(得分:9)

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

一个不错的选择是使用cwd类的subprocess.Popen参数,如此answer

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

答案 1 :(得分:3)

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

  

os。 chdir (路径)将当前工作目录更改为路径。

     

此功能可以支持指定文件描述符。描述符   必须引用打开的目录,而不是打开的文件。

     

3.3版中的新功能:添加了将路径指定为文件的支持   某些平台上的描述符。

     

在版本3.6中更改:接受path-like object

import os
from pathlib import Path

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

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

答案 2 :(得分:1)

对于那些不怕a third-party library的人:

$ pip install path.py

然后:

from path import Path

# Changing the working directory:
with Path("somewhere"):
    # cwd in now `somewhere`
    ...

,或者如果要在没有上下文管理器的情况下执行此操作:

Path("somewhere").cd()
# cwd in now `somewhere`