Найти текущий каталог и каталог файла
В Python, какие команды я могу использовать, чтобы найти:
- текущий каталог (где я был в терминале, когда я запускал скрипт Python), и
- где находится файл, который я выполняю?
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__ может помочь вам узнать, где находится исполняемый файл. Этот пост SO объясняет все: Как мне получить путь к текущему исполняемому файлу в 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))
pathlib
модуль, представленный в Python 3.4 ( PEP 428 - модуль pathlib - пути объектно-ориентированной файловой системы), значительно облегчает работу с путями.
$ 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
И чтобы получить путь к каталогу, где находится ваш скрипт, доступ .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
возражает против open
функционировать напрямую:
$ python3.6 scripts/2.py
OK
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]
о / р:"моя_папка"
Pathlib можно использовать таким образом, чтобы получить каталог, содержащий текущий скрипт:
import pathlib
filepath = pathlib.Path(__file__).resolve().parent
Если вы пытаетесь найти текущий каталог файла, в котором вы сейчас находитесь:
ОС агностическим способом:
dirname, filename = os.path.split(os.path.abspath(__file__))
Чтобы получить полный путь к текущему каталогу:
os.path.realpath ('')
Если вы используете Python 3.4, есть новый более высокий уровень pathlib
модуль, который позволяет удобно звонить pathlib.Path.cwd()
чтобы получить Path
объект, представляющий ваш текущий рабочий каталог, наряду со многими другими новыми функциями.
Больше информации об этом новом API можно найти здесь.
Ответ № 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())
Если вы ищете местоположение выполняемого в данный момент скрипта, вы можете использовать sys.argv[0]
чтобы получить полный путь.
Для вопроса 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]
не будет работать или будет работать странно при компиляции PyInstaller, потому что магические свойства не установлены в __main__
уровень и sys.argv[0]
так называется ваш exe (означает, что на него влияет рабочий каталог).
Для просмотра текущего рабочего каталога наберите следующий скрипт:
import os
current_working_directory = os.getcwd()
Получить ваш рабочий каталог в Python. Вы можете использовать следующий код:
import os
cwd = os.getcwd() #to get current working directory
print(cwd)