Как получить полный путь к каталогу текущего файла в Python?

Я хочу получить путь к каталогу текущего файла.
Я старался:

>>> os.path.abspath(__file__)
'C:\\python27\\test.py'

Но как я могу получить путь к каталогу? Например:

'C:\\python27\\'

19 ответов

Решение

Если вы имеете в виду каталог запускаемого скрипта:

import os
os.path.dirname(os.path.abspath(__file__))

Если вы имеете в виду текущий рабочий каталог:

import os
os.getcwd()

Обратите внимание, что до и после file это два подчеркивания, а не только один.

Также обратите внимание, что если вы работаете в интерактивном режиме или загрузили код из чего-то другого, чем файл (например, из базы данных или онлайн-ресурса), __file__ не может быть установлен, так как отсутствует понятие "текущий файл". Ответ выше предполагает наиболее распространенный сценарий запуска скрипта Python, который находится в файле.

В Python 3:

from pathlib import Path

mypath = Path().absolute()
print(mypath)

В Python 3.x я делаю:

from pathlib import Path

path = Path(__file__).parent.absolute()

Объяснение:

  • Path(__file__) путь к текущему файлу
  • .parent дает каталог, в котором находится файл
  • .absolute() дает вам полный абсолютный путь к нему.

С помощью pathlib это современный способ работы с дорожками. Если вам по каким-то причинам она понадобится позже, просто сделайте str(path),

Попробуй это:

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

Я обнаружил, что все следующие команды возвращают полный путь к родительскому каталогу скрипта Python 3.6.

Скрипт Python 3.6:

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-

from pathlib import Path

#Get the absolute path of a Python3.6 script
dir1 = Path().resolve()  #Make the path absolute, resolving any symlinks.
dir2 = Path().absolute() #See @RonKalian answer 
dir3 = Path(__file__).parent.absolute() #See @Arminius answer 

print(f'dir1={dir1}\ndir2={dir2}\ndir3={dir3}')

Ссылки с пояснениями: .resolve(), .absolute(), Path (file).parent (). Absolute()

ПОЛЕЗНЫЕ СВОЙСТВА ПУТИ В ПИТОНЕ:

 from pathlib import Path

    #Returns the path of the directory, where your script file is placed
    mypath = Path().absolute()
    print('Absolute path : {}'.format(mypath))

    #if you want to go to any other file inside the subdirectories of the directory path got from above method
    filePath = mypath/'data'/'fuel_econ.csv'
    print('File path : {}'.format(filePath))

    #To check if file present in that directory or Not
    isfileExist = filePath.exists()
    print('isfileExist : {}'.format(isfileExist))

    #To check if the path is a directory or a File
    isadirectory = filePath.is_dir()
    print('isadirectory : {}'.format(isadirectory))

    #To get the extension of the file
    fileExtension = mypath/'data'/'fuel_econ.csv'
    print('File extension : {}'.format(filePath.suffix))

РЕЗУЛЬТАТ: АБСОЛЮТНЫЙ ПУТЬ - это ПУТЬ, ГДЕ РАЗМЕЩЕН ВАЙ ФАЙЛ ПИТОНА

Абсолютный путь: D:\Study\Machine Learning\Jupitor Notebook\JupytorNotebookTest2\Udacity_Scripts\Matplotlib and seaborn Part2

Путь к файлу: D:\Study\Machine Learning\Jupitor Notebook\JupytorNotebookTest2\Udacity_Scripts\Matplotlib and seaborn Part2 \ data \ fuel_econ.csv

isfileExist: True

isadirectory: False

Расширение файла: .csv

работает также, если__file__недоступен (ноутбуки jupyter)

      import sys
from pathlib import Path
path_file = Path(sys.path[0])
print(path_file)

Также использует pathlib, который является объектно-ориентированным способом обработки путей в python 3.

Ты можешь использовать os а также os.path библиотека легко следующим образом

import os
os.chdir(os.path.dirname(os.getcwd()))

os.path.dirname возвращает верхний каталог из текущего. Это позволяет нам перейти на более высокий уровень без передачи аргумента файла и без знания абсолютного пути.

IPython имеет магическую команду %pwd получить настоящий рабочий каталог. Может использоваться следующим образом:

from IPython.terminal.embed import InteractiveShellEmbed

ip_shell = InteractiveShellEmbed()

present_working_directory = ip_shell.magic("%pwd")

На IPython Jupyter Notebook %pwd можно использовать непосредственно следующим образом:

present_working_directory = %pwd

Питон 2 и 3

Вы также можете просто сделать:

      from os import sep
print(__file__.rsplit(sep, 1)[0] + sep)

Что выводит что-то вроде:

      C:\my_folder\sub_folder\

Если вы просто хотите увидеть текущий рабочий каталог

import os
print(os.getcwd)

Если вы хотите изменить текущий рабочий каталог

os.chdir(path)

path - это строка, содержащая требуемый путь для перемещения. например

path = "C:\\Users\\xyz\\Desktop\\move here"

Система: MacOS

Версия: Python 3.6 с Анакондой

import os rootpath = os.getcwd() os.chdir(rootpath)

Это то, что мне нужно для работы

          path = os.getcwd().replace(os.sep, "/")
    name = Path(__file__).name
    full = str(path) + "/" + str(name)
    indv = full.split("/")

Предположим, у вас есть следующая структура каталогов: -

main / fold1 fold2 fold3...

folders = glob.glob("main/fold*")

for fold in folders:
    abspath = os.path.dirname(os.path.abspath(fold))
    fullpath = os.path.join(abspath, sch)
    print(fullpath)

Я сделал функцию для использования при запуске Python под IIS в CGI, чтобы получить текущую папку:

import os 
   def getLocalFolder():
        path=str(os.path.dirname(os.path.abspath(__file__))).split('\\')
        return path[len(path)-1]

Чтобы сохранить согласованность миграции между платформами (macOS/Windows/Linux), попробуйте:

path = r'%s' % os.getcwd().replace('\\','/')
## IMPORT MODULES
import os

## CALCULATE FILEPATH VARIABLE
filepath = os.path.abspath('') ## ~ os.getcwd()
## TEST TO MAKE SURE os.getcwd() is EQUIVALENT ALWAYS..
## ..OR DIFFERENT IN SOME CIRCUMSTANCES

Это можно сделать без модуля.

      def get_path():
    return (__file__.replace(f"<your script name>.py", ""))
print(get_path())
Другие вопросы по тегам