аватар on5fydu8@gmail.com · 01.01.1970 03:00

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

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

аватар on5fydu8@gmail.com · 01.01.1970 03:00

"

Если вы запускаете скрипт C:\Scripts\script.py из D:\work папки:

D:\work> py C:\Scripts\script.py

то:

  • D:\work — это текущая рабочая директория на момент старта скрипта. open('file.txt') будет пытаться открыть D:\work\file.txt файл
  • C:\Scripts — это директория со скриптом.

Текущая рабочая директория

Текущая рабочая директория возвращается , где CWD это Current Working Directory (""текущая рабочая директория""). os.getcwdb() возвращает путь в виде байт. Происхождение функции от . Другие способы могут вернуть разные результаты в зависимости от настроек доступа промежуточных директорий, общей длины (от платформы зависит) итд—не изобретайте своих способов, если не осознаёте всех последствий возможного изменения в поведении функции. Также нетрадиционные способы получения рабочей директории могут ухудшить читаемость другими Питон-программистами. Из :

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() снова явно не используется.

возвращает путь к текущей директории как объект c разными полезными и удобными методами такими как .glob('**/*.py').

Директория со скриптом

Текущая рабочая директория может отличаться от директории с текущим Питон-скриптом. Часто, но не всегда можно os.path.diame(os.path.abspath(__file__)) использовать, чтобы получить директорию с текущим Питон скриптом, но это не всегда работает. Посмотрите на .

Если хочется получить данные из файла, расположенного относительно установленного Питон-модуля, то используйте или setuptools' вместо построения путей c помощью __file__. Это работает даже, если . В Python 3.7 появился . К примеру, если у вас есть Питон пакет data внутри которого лежит файл.txt, то чтобы достать текст:

import importlib.resourcestext = importlib.resources.read_text('data', 'файл.txt') 

Если вы хотите найти место куда пользовательские данные можно положить, то предоставляет переносимый способ:

import appdirs   # $ pip install appdirsuser_data_dir = appdirs.user_data_dir(""Название приложения"", ""Кто создал"")

Разные платформы (Windows, MacOS, Linux) используют разные соглашения, appdirs позволяет не плодить сущностей и использовать на каждой платформе подходящие директории.

"

Последние

Похожие