Я хочу получить текущий путь к каталогу файлов. Я пытался:
>>> os.path.abspath(__file__)
'C:\\python27\\test.py'
Но как я могу получить путь к каталогу?
Например:
'C:\\python27\\'
Я хочу получить текущий путь к каталогу файлов. Я пытался:
>>> os.path.abspath(__file__)
'C:\\python27\\test.py'
Но как я могу получить путь к каталогу?
Например:
'C:\\python27\\'
Если вы имеете в виду каталог запускаемого скрипта:
import os
os.path.dirname(os.path.abspath(__file__))
Если вы имеете в виду текущий рабочий каталог:
import os
os.getcwd()
Обратите внимание, что до и после file
два подчеркивания, а не одно.
Также обратите внимание, что если вы работаете в интерактивном режиме или загрузили код из чего-то другого, чем файл (например, из базы данных или онлайн-ресурса), __file__
может не быть установлен, так как отсутствует понятие "текущий файл". Ответ выше предполагает наиболее распространенный сценарий запуска скрипта Python, который находится в файле.
Использование Path
является рекомендуемым способом начиная с Python 3:
from pathlib import Path
print("File Path:", Path(__file__).absolute())
print("Directory Path:", Path().absolute())
Документация: pathlib
Примечание. При использовании ноутбука Jupyter __file__
не возвращает ожидаемое значение, поэтому необходимо использовать Path().absolute()
.
В Python 3.x я делаю:
from pathlib import Path
path = Path(__file__).parent.absolute()
Объяснение:
Path(__file__)
- это путь к текущему файлу..parent
дает вам каталог, в котором находится файл..absolute()
дает вам полный абсолютный путь к нему. Использование pathlib
- это современный способ работы с путями. Если по какой-то причине вам это понадобится позже, просто введите str(path)
.
import os
print os.path.dirname(__file__)
Вы можете легко использовать библиотеки 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
ПОЛЕЗНЫЕ СВОЙСТВА ПУТИ В ПИТОНЕ:
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
Попробуй это:
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
Чтобы сохранить согласованность миграции между платформами (macOS/Windows/Linux), попробуйте:
path = r'%s' % os.getcwd().replace('\\','/')
Я сделал функцию для использования при запуске Python под IIS в CGI, чтобы получить текущую папку:
import os
def getLocalFolder():
path=str(os.path.dirname(os.path.abspath(__file__))).split('\\')
return path[len(path)-1]
Система: MacOS
Версия: Python 3.6 с Анакондой
import os rootpath = os.getcwd() os.chdir(rootpath)
Начиная с 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
перезапишет все, что было в месте назначения
Я обнаружил, что все следующие команды возвращают полный путь к родительскому каталогу скрипта 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()
## 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