Страницы

Поиск по вопросам

четверг, 28 ноября 2019 г.

Текущая директория в Python

#python #python_3.x


Как в Python - программе узнать путь до текущей директории со скриптом. Я знаю, что
для этого требуется библиотека os, но там столько различных классов и функций, что
можно пол дня убить на поиски.
    


Ответы

Ответ 1



Если вы запускаете скрипт C:\Scripts\script.py из D:\work папки: D:\work> py C:\Scripts\script.py то: D:\work — это текущая рабочая директория на момент старта скрипта. open('file.txt') будет пытаться открыть D:\work\file.txt файл C:\Scripts — это директория со скриптом. Текущая рабочая директория Текущая рабочая директория возвращается os.getcwd() функцией, где CWD это Current Working Directory ("текущая рабочая директория"). os.getcwdb() возвращает путь в виде байт. Происхождение функции от POSIX getcwd(3). Другие способы могут вернуть разные результаты в зависимости от настроек доступа промежуточных директорий, общей длины (от платформы зависит) итд—не изобретайте своих способов, если не осознаёте всех последствий возможного изменения в поведении функции. Также нетрадиционные способы получения рабочей директории могут ухудшить читаемость другими Питон-программистами. Из The Zen of Python : There should be one-- and preferably only one --obvious way to do it. По умолчанию относительные пути используют именно эту директорию, поэтому явно вызывать os.getcwd() редко нужно. Например, open('file.txt') вызов открывает файл 'file.txt' в текущей директории. Если необходимо передать полный путь в виде строки, то можно использовать os.path.abspath('file.txt')—getcwd() снова явно не используется. Path.cwd() из pathlib модуля возвращает путь к текущей директории как объект c разными полезными и удобными методами такими как .glob('**/*.py'). Директория со скриптом Текущая рабочая директория может отличаться от директории с текущим Питон-скриптом. Часто, но не всегда можно os.path.dirname(os.path.abspath(__file__)) использовать, чтобы получить директорию с текущим Питон скриптом, но это не всегда работает. Посмотрите на get_script_dir() функцию, которая поддерживает более общий случай. Если хочется получить данные из файла, расположенного относительно установленного Питон-модуля, то используйте pkgutil.get_data() или setuptools' pkg_resources.resource_string() вместо построения путей c помощью __file__. Это работает даже, если ваш пакет упакован в архив. В Python 3.7 появился importlib.resources модуль. К примеру, если у вас есть Питон пакет data внутри которого лежит файл.txt, то чтобы достать текст: import importlib.resources text = importlib.resources.read_text('data', 'файл.txt') Если вы хотите найти место куда пользовательские данные можно положить, то appdirs модуль предоставляет переносимый способ: import appdirs # $ pip install appdirs user_data_dir = appdirs.user_data_dir("Название приложения", "Кто создал") Разные платформы (Windows, MacOS, Linux) используют разные соглашения, appdirs позволяет не плодить сущностей и использовать на каждой платформе подходящие директории.

Ответ 2



Получить текущую директорю, где запущен скрипт dir = os.path.abspath(os.curdir) Получить текущую директорю, где расположен скрипт os.path.abspath(__file__)

Комментариев нет:

Отправить комментарий