Получить каталог текущего скрипта Python
При работе с обработкой файлов вы могли заметить, что на файлы ссылаются только их имена, например, « GFG.txt », и если файл не находится в каталоге скрипта, Python вызывает ошибку. Итак, как это сделать?
Концепция текущего рабочего каталога (CWD) становится здесь важной. Рассмотрим CWD как папку, внутри которой работает Python. Всякий раз, когда файлы вызываются только по их имени, Python предполагает, что он запускается в CWD, что означает, что ссылка только на имя будет успешной, только если файл находится в CWD Python.
Примечание. Папка, в которой выполняется скрипт Python, называется Current Directory. Это не путь, где находится скрипт Python.
Получение текущего рабочего каталога
Python предоставляет модуль ОС для взаимодействия с операционной системой. Этот модуль входит в стандартную утилиту Python. Все функции в модуле os вызывают OSError в случае недопустимых или недоступных имен и путей к файлам или других аргументов, которые имеют правильный тип, но не принимаются операционной системой.
Parameter: No parameter is required.
Return Value: This method returns a string which represents the current working directory.
Пример:
# Python программа для объяснения метода os.getcwd ()
# Получить текущую работу
# каталог (CWD)
# Распечатать текущую работу
# каталог (CWD)
print ( «Current working directory:» )
Выход:
Примечание. Чтобы узнать больше о os.getcwd() нажмите здесь.
Получение пути сценария
os.path.realpath() можно использовать для получения пути к текущему скрипту Pyhton. На самом деле os.path.realpath() в Python используется для получения канонического пути указанного имени файла путем устранения любых символических ссылок, встречающихся в пути. Специальная переменная __file__ передается realpath() для получения пути к скрипту Python.
Примечание: __file__ — это путь к файлу, из которого был загружен модуль, если он был загружен из файла.
Syntax: os.path.realpath(path)
Parameter:
path: A path-like object representing the file system path.
A path-like object is either a string or bytes object representing a path.
Return Type: This method returns a string value which represents the canonical path.
Exmaple:
# Python программа для получения
# путь скрипта
# Получить текущую работу
# каталог (CWD)
Как получить и изменить текущий рабочий каталог в Python
При работе с файлами в каталогах в Python всегда рекомендуется использовать абсолютные пути. Однако, если вы работаете с относительными путями, вам необходимо понимать концепцию текущего рабочего каталога и то, как найти или изменить текущий рабочий каталог. Абсолютный путь указывает расположение файла или каталога, начиная с корневого каталога, а относительный путь начинается с текущего рабочего каталога.
Когда вы запускаете сценарий Python, в качестве текущего рабочего каталога устанавливается каталог, из которого выполняется сценарий.
Модуль os python обеспечивает переносимый способ взаимодействия с операционной системой. Модуль является частью стандартной библиотеки Python и включает методы поиска и изменения текущего рабочего каталога.
Получение текущего рабочего каталога в Python
Метод getcwd() модуля os в Python возвращает строку, содержащую абсолютный путь к текущему рабочему каталогу. Возвращенная строка не включает завершающий символ косой черты.
Чтобы использовать методы модуля os, вы должны импортировать модуль в верхней части файла.
Ниже приведен пример, показывающий, как распечатать текущий рабочий каталог:
Результат будет выглядеть примерно так:
Изменение текущего рабочего каталога в Python
Метод принимает один аргумент — путь к каталогу, в который вы хотите перейти. Аргумент path может быть абсолютным или относительным.
Результат будет выглядеть примерно так:
Выводы
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Как получить путь к текущему исполняемому файлу в Python?
это может показаться вопрос новичка, но это не так. Некоторые общие подходы не работают во всех случаях:
sys.argv[0]
__файл__
вопросы, связанные с неполными ответами:
Я ищу универсального решения, тот, который будет работать во всех приведенных выше случаях использования.
обновление
вот результат теста:
вывод python a.py (on Windows)
subdir/b.py
дерево
10 ответов
вы не можете самостоятельно определить расположение основных скрипта. В конце концов, иногда сценарий вообще не из файла. Например, он может исходить из интерактивного интерпретатора или динамически генерируемого кода, хранящегося только в памяти.
однако вы можете надежно определить местоположение модуля, так как модули всегда загружаются из файла. Если вы создадите модуль со следующим кодом и поместите его в тот же каталог, что и основной скрипт, то основной скрипт может импортировать модуль и использовать его для поиска самого себя.
Если у вас есть несколько основных сценариев в разных каталогах, вам может понадобиться более одной копии module_locator.
конечно, если ваш основной скрипт загружен каким-то другим инструментом, который не позволяет вам импортировать модули, которые расположены вместе с вашим скриптом, тогда вам не повезло. В таких случаях информация, которую вы ищете, просто не существует нигде в вашей программе. Лучше всего было бы подать ошибку с авторами инструмента.
во-первых, вам нужно импортировать из inspect и os
далее, везде, где вы хотите найти исходный файл, вы просто используете
я столкнулся с подобной проблемой, и я думаю, что это может решить проблему:
он работает для обычных скриптов и в режиме ожидания. Все, что я могу сказать, это попробовать это для других!
Мое типичное использование:
теперь я использую _ _ modpath _ _ вместо _ _ file__.
короткий ответ:нет гарантированного способа получить нужную вам информацию, однако есть эвристика, которая работает почти всегда на практике. Вы можете посмотреть на как найти местоположение исполняемого файла в C?. Он обсуждает проблему с точки зрения C, но предлагаемые решения легко транскрибируются в Python.
это решение является надежным даже в исполняемых файлах
см. мой ответ на вопрос импорт модулей из родительской папки для соответствующей информации, в том числе почему мой ответ не использует ненадежный __file__ переменной. Это простое решение должно быть кросс-совместимо с различными операционными системами в качестве модулей os и inspect приходите как часть Python.
во-первых, вам нужно импортировать части проверить и os модули.
далее использовать следующая строка в любом другом месте нужна в вашем коде Python:
как работает:
из встроенного модуля os (описание ниже) импортируется.
OS подпрограммы для Mac, NT, или Posix в зависимости от того, какая система мы находимся на.
получить полезную информацию из live Python объекты.
‘ в оболочке Python или возвращает путь к файлу кода Python, выполняемого в настоящее время.
используя abspath в результате getsourcefile(lambda:0) должен убедиться,что созданный путь к файлу является полным путем к файлу Python.
Это объясняло решение изначально было основано на коде из ответа на как получить путь к текущему исполняемому файлу в Python?.
это должно сделать трюк кросс-платформенным способом (пока вы не используете интерпретатор или что-то еще):
у меня нет Mac; поэтому я не тестировал это на одном. Пожалуйста, дайте мне знать, если это сработает, как кажется, это должно быть. Я тестировал это в Linux (Xubuntu) с Python 3.4. Обратите внимание, что многие решения этой проблемы не работают на Маках (так как я слышал, что __file__ нет на Macs).
обратите внимание, что если ваш скрипт является символической ссылкой, он даст вам путь к файлу, на который он ссылается (а не путь символической ссылки).
Как получить и изменить текущий рабочий каталог в Python
Главное меню » Python 3 » Как получить и изменить текущий рабочий каталог в Python
Когда вы запускаете сценарий Python, в качестве текущего рабочего каталога устанавливается каталог, из которого выполняется сценарий.
Модуль os python обеспечивает переносимый способ взаимодействия с операционной системой. Модуль является частью стандартной библиотеки Python и включает методы поиска и изменения текущего рабочего каталога.
Получение текущего рабочего каталога в Python
Метод getcwd() модуля os в Python, возвращает строку, содержащую абсолютный путь к текущему рабочему каталогу. Возвращенная строка не включает завершающий символ косой черты.
Чтобы использовать методы модуля os, вы должны импортировать модуль в верхней части файла.
Ниже приведен пример, показывающий, как распечатать текущий рабочий каталог:
Результат будет выглядеть примерно так:
Изменение текущего рабочего каталога в Python
Чтобы изменить текущий рабочий каталог в Python, используйте метод chdir().
Метод принимает один аргумент – путь к каталогу, в который вы хотите перейти. Аргумент path может быть абсолютным или относительным.
Результат будет выглядеть примерно так:
Аргумент, предоставленный методу chdir(), должен быть каталогом, в противном случае возникает исключение NotADirectoryError. Если указанный каталог не существует, возникает исключение FileNotFoundError. Если у пользователя, под которым выполняется сценарий, нет необходимых разрешений, возникает исключение PermissionError.
Вывод
Чтобы найти текущий рабочий каталог в Python, используйте os.getcwd(), а для изменения текущего рабочего каталога используйте os.chdir(path).
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Как получить путь к текущему исполняемому файлу в Python?
это может показаться вопрос новичка, но это не так. Некоторые общие подходы не работают во всех случаях:
sys.argv[0]
_ _ file__
вопросы, связанные с неполными ответами:
Я ищу универсального решения, которая будет работать во всех вышеперечисленных случаях использовать.
обновление
вот результат теста:
вывод python a.py (on Windows)
subdir/b.py
дерево
10 ответов:
вы не можете напрямую определить местоположение основного выполняемого скрипта. В конце концов, иногда сценарий вообще не исходил из файла. Например, он может исходить из интерактивного интерпретатора или динамически генерируемого кода, хранящегося только в памяти.
тем не менее, вы можете надежно определить местоположение модуля, так как модули всегда загружаются из файла. Если вы создадите модуль со следующим кодом и поместите его в тот же каталог, что и ваш основной скрипт, то основной скрипт может импортировать модуль и использовать его, чтобы найти себя.
Если у вас есть несколько основных скриптов в разных каталогах, вам может понадобиться более одной копии module_locator.
конечно, если ваш основной скрипт загружен каким-то другим инструментом, который не позволяет вам импортировать модули, которые расположены вместе с вашим скриптом, то вам не повезло. В подобных случаях информация, которую вы ищете, просто не существует нигде в вашей программе. Лучше всего было бы подать ошибку с авторами инструмента.
во-первых, вам нужно импортировать из inspect и os
далее, везде, где вы хотите найти исходный файл от вас просто использовать
я столкнулся с подобной проблемой, и я думаю, что это может решить проблему:
Он работает для обычных скриптов и в режиме ожидания. Все, что я могу сказать, это попробовать его на других!
Мое типичное использование:
сейчас я использую __MODPATH выступает__ вместо __файл__.
короткий ответ:нет гарантированного способа получить нужную вам информацию, однако, есть эвристики, которые работают почти всегда на практике. Вы можете посмотреть на как найти расположение исполняемого файла в C?. Он обсуждает проблему с точки зрения C, но предлагаемые решения легко транскрибируются на Python.
это решение надежно даже в исполняемых файлах
смотрите мой ответ на вопрос импорт модулей из родительской папки для соответствующей информации, в том числе почему мой ответ не использует ненадежный __file__ переменной. Это простое решение должно быть кросс-совместимо с различными операционными системами в качестве модулей os и inspect приходите как часть Python.
во-первых, вам нужно импортировать части проверить и os модули.
далее использовать следующая строка в любом другом месте это необходимо в вашем коде Python:
как работает:
из встроенного модуля os (описание ниже) импортируется.
процедуры ОС для Mac, NT или Posix в зависимости от того, на какой системе мы находимся.
получить полезную информацию от live Python объекты.
‘ в оболочке Python или возвращает путь к файлу текущего выполняемого кода Python.
используя abspath в результате getsourcefile(lambda:0) должен убедиться, что созданный путь к файлу является полным путем к файлу Python.
Это объяснило решение изначально было основано на коде из ответа по адресу как получить путь к текущему исполняемому файлу в Python?.
это должно сделать трюк кросс-платформенным способом (пока вы не используете интерпретатор или что-то еще):
у меня нет Mac; так что, я не проверял это на одном. Пожалуйста, дайте мне знать, если это работает, как кажется, это должно быть. Я тестировал это в Linux (Xubuntu) с Python 3.4. Обратите внимание, что многие решения этой проблемы не работают на Mac (так как я слышал, что __file__ нет на Macs).
обратите внимание, что если ваш скрипт является символической ссылкой, он даст вам путь к файлу, на который он ссылается (а не путь символической ссылки).
можно использовать Path С pathlib модуль:
вы можете использовать вызов parent чтобы идти дальше по пути:





