Найти текущий каталог и каталог файла [дубликат]
этот вопрос уже есть ответ здесь:
Как правильно определить текущий каталог скрипта?
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()
ссылки на документацию для модулей, констант и функций, используемых выше:
- The
osиos.pathмодули.- The
__file__постоянныйos.path.realpath(path)(возвращает "канонический путь указанного имени файла, исключающий любые символические ссылки, встречающиеся в пути")os.path.dirname(path)(возвращает " имя каталога путиpath")os.getcwd()(возвращает "строка, представляющая текущий рабочий каталог")os.chdir(path)("изменить текущий рабочий каталогpath")
Текущий Рабочий Каталог:ОС.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.To получить полный путь к текущему каталогу
>>import os >>print os.getcwd()o / p: "C: \Users\admin\myfolder"
1.To получить только имя текущей папки каталога
>>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-объектно-ориентированные пути файловой системы), делает путь, связанный с опытом гораздо лучше.$ 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, потому что магические свойства не установлены в иsys.argv[0]- путь EXE-файл назывался (означает, что на него влияет рабочий реж.)
чтобы получить рабочий каталог в python. Вы можете использовать следующий код:
импорт ОС cwd = os.getcwd () #для получения рабочего каталога
Comments