Найти текущий каталог и каталог файла [дубликат]
этот вопрос уже есть ответ здесь:
- Как правильно определить текущий каталог скрипта? 13 ответов
- Как узнать / изменить текущий каталог в оболочке Python? 6 ответов
в 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__ 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]
чтобы получить полный путь.
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 () #для получения рабочего каталога