Найти текущий каталог и каталог файла

Какие команды можно использовать в Python для поиска:

  1. текущий каталог (где я находился в терминале, когда запускал скрипт Python), и
  2. где находится файл, который я выполняю?
Комментарии к вопросу (2)
Решение

Чтобы получить полный путь к директории, в которой находится файл Python, напишите в этом файле следующее:

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))

(Обратите внимание, что приведенное выше заклинание не сработает, если вы уже использовали os.chdir() для изменения текущего рабочего каталога, поскольку значение константы __file__ относительно текущего рабочего каталога и не меняется при вызове os.chdir()).


Чтобы получить текущий рабочий каталог, используйте

import os
cwd = os.getcwd()

Ссылки на документацию для модулей, констант и функций, использованных выше:

  • Модули os и os.path.
  • Константа __file__
  • os.path.realpath(path) (возвращает "канонический путь к указанному имени файла, исключая все встречающиеся в пути символические ссылки")
  • os.path.dirname(path) (возвращает "имя каталога для имени пути path")
  • os.getcwd() (возвращает "строку, представляющую текущий рабочий каталог")
  • os.chdir(path) ("изменяет текущий рабочий каталог на path")
Комментарии (8)

Текущий рабочий каталог: os.getcwd()

А атрибут __file__ поможет вам узнать, где находится выполняемый файл. В этом посте SO все объясняется: https://stackoverflow.com/questions/2632199/how-do-i-get-the-path-of-the-current-executed-file-in-python

Комментарии (0)

Это может вам пригодиться в качестве ссылки:

import os

print("Path at terminal when executing this file")
print(os.getcwd() + "\n")

print("This file path, relative to os.getcwd()")
print(__file__ + "\n")

print("This file full path (following symlinks)")
full_path = os.path.realpath(__file__)
print(full_path + "\n")

print("This file directory and name")
path, filename = os.path.split(full_path)
print(path + ' --> ' + filename + "\n")

print("This file directory only")
print(os.path.dirname(full_path))
Комментарии (3)

[pathlib] модули(https://docs.python.org/3/library/pathlib.html), представил в Python 3.4 (Пеп 428 — модуль pathlib — объектно-ориентированная файловая система путь), делает путь, связанных с большим опытом гораздо лучше.

$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
    ├── 1.py
    └── 2.py

Для того чтобы получить текущие использовать рабочую директорию путь.Дов():

from pathlib import Path

print(Path.cwd())  # /home/skovorodkin/stack

Чтобы получить абсолютный путь к файлу сценария, пути использования .разрешения() метод:

print(Path(__file__).resolve())  # /home/skovorodkin/stack/scripts/1.py

И чтобы получить путь к каталогу, где находится ваш скрипт, доступ к .родитель (рекомендуется позвонить.решения()перед.родитель`):

print(Path(__file__).resolve().parent)  # /home/skovorodkin/stack/scripts

Помните, что `file, что не является надежным в некоторых ситуациях: как я могу получить путь текущего исполняемого файла в Python?.


Обратите внимание, что путь.ухо(),путь.решения () и другие методы "путь" возвратить объекты путь (PosixPath в моем случае), а не строки. В Python 3.4 и 3.5, что вызвало некоторую боль, потому что открыть встроенные функции могут работать только со строковыми или байт объекты, а не поддерживать "путь" объекты, поэтому приходилось конвертировать путь объекты в строки или использовать путь.открыть() метод, но последний вариант требует изменить старый код:

$ cat scripts/2.py
from pathlib import Path

p = Path(__file__).resolve()

with p.open() as f: pass
with open(str(p)) as f: pass
with open(p) as f: pass

print('OK')

$ python3.5 scripts/2.py
Traceback (most recent call last):
  File "scripts/2.py", line 11, in 
    with open(p) as f:
TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')

Как вы можете видеть, открыть(р)` не работает с Python 3.5.

ОПТОСОЗ 519 — добавить путь к файлу протокола, реализованный на языке Python 3.6, добавляет поддержку PathLike объекты открыть функция, так что теперь вы можете пройти "путь" объекты "открыть" функции:

$ python3.6 scripts/2.py
OK
Комментарии (1)

1.Чтобы получить полный путь к текущему каталогу

    >>import os
    >>print os.getcwd()

o/p:"C :\Users\admin\myfolder"

1.Чтобы получить только имя папки текущего каталога

    >>import os
    >>str1=os.getcwd()
    >>str2=str1.split('\\')
    >>n=len(str2)
    >>print str2[n-1]

o/p:"myfolder"

Комментарии (4)

Если вы пытаетесь найти текущий каталог файл в данный момент Вы находитесь в:

ОС агностик образом:

dirname, filename = os.path.split(os.path.abspath(__file__))
Комментарии (0)

Если вы'вновь с помощью Python 3.4, есть абсолютно новый, более высокий уровень pathlib модуль, который позволяет удобно называть pathlib.Путь.чвд (), чтобы получитьпуть` объект, представляющий вашу текущую рабочую директорию, наряду со многими другими новыми функциями.

Подробнее на этот новый API можно найти здесь.

Комментарии (1)

Ответ #1:

Если вы хотите текущем каталоге, выполните следующие действия:

import os
os.getcwd()

Если вы хотите просто любое имя папки и путь к этой папке, сделайте следующее:

def get_folder_name(folder):
    '''
    Returns the folder name, given a full folder path
    '''
    return folder.split(os.sep)[-1]

Ответ #2:

import os
print os.path.abspath(__file__)
Комментарии (0)

Немного опоздала на вечеринку, но я думаю, что самый краткий путь, чтобы найти имя текущего контекста выполнения будет

current_folder_path, current_folder_name = os.path.split(os.getcwd())
Комментарии (0)

Pathlib может быть использован таким образом, чтобы получить каталог, содержащий текущий скрипт :

import pathlib
filepath = pathlib.Path(__file__).resolve().parent
Комментарии (5)

Чтобы получить полный путь текущего каталога:<БР/>

ОС.путь.реального пути('.')

Комментарии (3)

Если вы'вновь искать место, которая сейчас выполняется скрипт, можно использовать представление sys.аргумент argv[0], чтобы получить полный путь.

Комментарии (1)

На вопрос операционной системы 1 использовать.функция getcwd() # получить рабочую DirиОС.оператор chdir(Р'D:\Steam\steamapps\common') # комплект рабочих реж`


Я рекомендую использовать пакет sys.аргумент argv[0] на вопрос 2, потому что представление sys.агду-это неизменный и, следовательно, всегда возвращает текущий файл (путь к объекту модуль) и не зависит от ос.помощью chdir(). Также вы можете сделать как этот:

import os
this_py_file = os.path.realpath(__file__)

# vvv Below comes your code vvv #

но что фрагмент и sys файлы.аргумент argv[0] не будет работать или будет работать странно, когда составлен PyInstaller, потому что магические свойства не установлены в уровень _главный ___ " и " представление sys.аргумент argv[0]` - это путь в EXE-файл называется (означает, что он становится пострадавшим от рабочего каталога).

Комментарии (0)