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

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

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

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

Например:

'C:\\python27\\'

Ответы

Ответ 1

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

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

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

import os
os.getcwd()

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

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

Ответ 2

Использование Path является рекомендуемым способом начиная с Python 3:

from pathlib import Path
print("File      Path:", Path(__file__).absolute())
print("Directory Path:", Path().absolute())  

Документация: pathlib

Примечание. При использовании ноутбука Jupyter __file__ не возвращает ожидаемое значение, поэтому необходимо использовать Path().absolute().

Ответ 3

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

from pathlib import Path

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

Объяснение:

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

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

Ответ 4

import os
print os.path.dirname(__file__)

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

 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

Ответ 8

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

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

Ответ 9

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

path = r'%s' % os.getcwd().replace('\\','/')

Ответ 10

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

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

Ответ 11

Система: MacOS

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

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

Ответ 12

Начиная с Python 3.5, вы можете делать следующее для небольших файлов (например, текстовые файлы, маленькие jpegs):

from pathlib import Path

source = Path('../path/to/my/file.txt')
destination = Path('../path/where/i/want/to/store/it.txt')
destination.write_bytes(source.read_bytes())

write_bytes перезапишет все, что было в месте назначения

Ответ 13

Я обнаружил, что все следующие команды возвращают полный путь к родительскому каталогу скрипта 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(), Путь (файл).parent(). absolute()

Ответ 14

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