Найти текущий каталог и каталог файла [дубликат]

этот вопрос уже есть ответ здесь:

в Python, какие команды я могу использовать, чтобы найти:

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

15 ответов


чтобы получить полный путь к каталогу, в котором содержится файл 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")

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

и __file__ attribute может помочь вам узнать, где находится файл, который вы выполняете. Это так пост объясняет все:как получить путь к текущему исполняемому файлу в Python?


вы можете найти это полезным в качестве ссылки:

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))

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"


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

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

dirname, filename = os.path.split(os.path.abspath(__file__))

ответ #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__)

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

current_folder_path, current_folder_name = os.path.split(os.getcwd())

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

более подробную информацию об этом новом API можно найти здесь.


pathlib модуль ввел в Python 3.4 (PEP 428-модуль pathlib-объектно-ориентированные пути файловой системы), делает связанный с path опыт намного лучше.

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

для получения текущего рабочего каталога используйте Path.cwd():

from pathlib import Path

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

чтобы получить абсолютный путь к файлу скрипта, используйте Path.resolve() способ:

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

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

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

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


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

$ 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 <module>
    with open(p) as f:
TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')

Как видите,open(p) не работает с Python 3.5.

PEP 519-добавление протокола пути к файловой системе, реализованный в Python 3.6, добавляет поддержка PathLike объекты open, так что теперь вы можете пройти Path объекты


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


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

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


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

import pathlib
filepath = pathlib.Path(__file__).resolve().parent

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

import os
current_working_directory = os.getcwd()

для вопроса 1 Используйте os.getcwd() # get working dir и os.chdir(r'D:\Steam\steamapps\common') # set working dir


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

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

# vvv Below comes your code vvv #

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


чтобы получить ваш рабочий каталог в python. Вы можете использовать следующий код:

импорт ОС cwd = os.getcwd () #для получения рабочего каталога