it-swarm.com.ru

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

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

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

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

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

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

303
Nix

Вы можете найти это полезным для справки:

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))
252
Daniel Reis

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]

о/р: "моя_папка"

55
vinithravit

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
49
skovorodkin

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

ОС агностическим способом:

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

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

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

29
Jazzer

Ответ на # 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__)
28
Blairg23

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

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

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

import pathlib
filepath = pathlib.Path(__file__).resolve().parent
17
Mathieu C.

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

os.path.realpath ( '')

17
Ilia S.

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

16
Grochni

Для просмотра текущего рабочего каталога наберите следующий скрипт:

import os
current_working_directory = os.getcwd()
9
Mohammad Hassan

Для вопроса 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 (это означает, что на него воздействует рабочий каталог).

7
Vladislav Toncharov

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

import os
cwd = os.getcwd() #to get current working directory
print(cwd)
4
Nirali Khoda