使用Python pathlib
(Documentation)功能更改目录的预期方法是什么?
让我们假设我创建了一个Path
对象,如下所示:
from pathlib import Path
path = Path('/etc')
目前我只知道以下内容,但这似乎破坏了pathlib
的想法。
import os
os.chdir(str(path))
答案 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`