How can I change directory with Python pathlib

前端 未结 3 816
感情败类
感情败类 2021-02-05 02:34

What is the intended way to change directory using the Python pathlib (Documentation) functionality?

Lets assume I create a Path object as foll

相关标签:
3条回答
  • In the Python 3.6 or above, os.chdir() can deal with Path object directly. In fact, the Path object can replace most str paths in standard libraries.

    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)
    

    This may help in the future projects which do not have to be compatible with 3.5 or below.

    0 讨论(0)
  • 2021-02-05 03:04

    Based on the comments I realized that pathlib does not help changing directories and that directory changes should be avoided if possible.

    Since I needed to call bash scripts outside of Python from the correct directory, I opted for using a context manager for a cleaner way of changing directories similar to this 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)
    

    A good alternative is to use the cwd parameter of the subprocess.Popen class as in this answer.

    If you are using Python <3.6 and path is actually a pathlib.Path, you need str(path) in the chdir statements.

    0 讨论(0)
  • 2021-02-05 03:06

    If you don't mind using a third-party library:

    $ pip install path

    then:

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

    or if you want to do it without the context manager:

    Path("somewhere").cd()
    # current working directory is now changed to `somewhere`
    
    0 讨论(0)
提交回复
热议问题