python получить - Найти текущий каталог и каталог файла




8 Answers

Чтобы получить полный путь к каталогу, в который содержится файл Python, напишите его в этом файле:

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))

(Обратите внимание, что приведенное выше заклинание не будет работать, если вы уже использовали os.chdir() чтобы изменить текущий рабочий каталог, поскольку значение константы __file__ относится к текущему рабочему каталогу и не изменяется с помощью os.chdir() вызов 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 » )
создать список

В Python, какие команды можно использовать для поиска:

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



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

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



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

OS агностик:

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



pathlib , introduced в 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 для прямой функции:

$ python3.6 scripts/2.py
OK



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



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




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

import os
current_working_directory = os.getcwd()



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

import os cwd = os.getcwd () #for Получить рабочий каталог




Related

python directory