Как изменить каталог с помощью Python pathlib
Каким образом можно изменить каталог с помощью функции Python pathlib
(Documentation)?
Предположим, что я создаю объект Path
следующим образом:
from pathlib import Path
path = Path('/etc')
В настоящее время я просто знаю следующее, но это, похоже, подрывает идею pathlib
.
import os
os.chdir(str(path))
Ответы
Ответ 1
На основе комментариев я понял, что pathlib
не помогает сменить каталоги и, по возможности, следует избегать изменений каталога.
Поскольку мне нужно было вызвать bash скрипты вне Python из правильного каталога, я решил использовать диспетчер контекста для более чистого способа смены каталогов, подобных этому 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
, как в этом .
Если вы используете Python < 3.6 и path
, на самом деле это pathlib.Path
, вам нужно str(path)
в операторах chdir
.
Ответ 2
В Python 3.6 или выше os.chdir()
может иметь дело с объектом Path
. Фактически объект Path
может заменить большинство str
путей в стандартных библиотеках.
os. chdir (путь) Измените текущий рабочий каталог на путь.
Эта функция может поддерживать указание дескриптора файла. Дескриптор должен ссылаться на открытый каталог, а не на открытый файл.
Новое в версии 3.3: Добавлена поддержка указания пути как файла дескриптор на некоторых платформах.
Изменено в версии 3.6: принимает путь-подобный объект.
import os
from pathlib import Path
path = Path('/etc')
os.chdir(path)
Это может помочь в будущих проектах, которые не должны быть совместимы с 3.5 или ниже.
Ответ 3
Для тех, кто не боится сторонней библиотеки:
$ 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'
Ответ 4
Использование pathlib (доступно с версии 3.4)
from pathlib import Path
Path("somewhere").cwd()