Jak uzyskać pełną ścieżkę do katalogu bieżącego pliku?
Chcę pobrać ścieżkę do bieżącego pliku. Próbowałem:
>>> os.path.abspath(__file__)
'C:\\python27\\test.py'
Ale jak mogę odzyskać ścieżkę katalogu?
Na przykład:
'C:\\python27\\'
15 answers
Python 3
Dla katalogu uruchamianego skryptu:
import pathlib
pathlib.Path(__file__).parent.absolute()
Dla bieżącego katalogu roboczego:
import pathlib
pathlib.Path().absolute()
Python 2 i 3
Dla katalogu uruchamianego skryptu:
import os
os.path.dirname(os.path.abspath(__file__))
Jeśli masz na myśli bieżący katalog roboczy:
import os
os.path.abspath(os.getcwd())
Zauważ, że przed i po file
to dwa podkreślenia, a nie tylko jeden.
Należy również pamiętać, że jeśli uruchamiasz interaktywnie lub załadowałeś kod z czegoś innego niż plik (np. resource), __file__
nie może być ustawiony, ponieważ nie ma pojęcia "bieżący plik". Powyższa odpowiedź zakłada najczęstszy scenariusz uruchomienia skryptu Pythona znajdującego się w pliku.
Referencje
- pathlib w dokumentacji Pythona.
- os.ścieżka 2.7, os.ścieżka 3.8
- os.getcwd 2.7, os.getcwd 3.8
- co oznacza zmienna _ _ file_ _ / do?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-11 15:46:57
Używanie Path
jest zalecanym sposobem od Pythona 3:
from pathlib import Path
print("File Path:", Path(__file__).absolute())
print("Directory Path:", Path().absolute()) # Directory of current working directory, not __file__
Dokumentacja: pathlib
Uwaga: Jeśli używasz Notatnika Jupyter, __file__
nie zwraca wartości oczekiwanej, więc należy użyć Path().absolute()
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-11 04:16:00
W Pythonie 3.x i do:
from pathlib import Path
path = Path(__file__).parent.absolute()
Wyjaśnienie:
-
Path(__file__)
jest ścieżką do bieżącego pliku. -
.parent
daje katalog w którym znajduje się plik. -
.absolute()
daje ci pełną absolutną ścieżkę do niego.
Używanie pathlib
jest nowoczesnym sposobem pracy ze ścieżkami. Jeśli z jakiegoś powodu potrzebujesz go później jako ciąg znaków, po prostu zrób str(path)
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-26 18:36:39
import os
print os.path.dirname(__file__)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-07 12:24:32
Spróbuj tego:
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-23 09:51:37
Możesz łatwo używać os
i os.path
biblioteki w następujący sposób
import os
os.chdir(os.path.dirname(os.getcwd()))
os.path.dirname
zwraca górny katalog z bieżącego.
Pozwala nam to przejść na wyższy poziom bez przekazywania jakichkolwiek argumentów pliku i bez znajomości ścieżki bezwzględnej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-02 18:38:44
IPython
posiada magiczne polecenie %pwd
, aby uzyskać obecny katalog roboczy. Można go używać w następujący sposób:
from IPython.terminal.embed import InteractiveShellEmbed
ip_shell = InteractiveShellEmbed()
present_working_directory = ip_shell.magic("%pwd")
Na notebooku IPython Jupyter %pwd
może być używany bezpośrednio w następujący sposób:
present_working_directory = %pwd
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 05:50:10
UŻYTECZNE WŁAŚCIWOŚCI ŚCIEŻKI W PYTHONIE:
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))
Wyjście: ŚCIEŻKA BEZWZGLĘDNA JEST ŚCIEŻKĄ, NA KTÓREJ ZNAJDUJE SIĘ PLIK PYTHONA
Ścieżka bezwzględna : D:\Study\Machine Learning\Jupitor Notebook\Jupytornotebookest2\Udacity_Scripts\Matplotlib and seaborn Part2
Ścieżka do pliku : D:\Study\Machine Learning\Jupitor Notebook\Jupytornotebookest2\Udacity_Scripts\Matplotlib and seaborn Part2\data \ fuel_econ.csv
IsfileExist: True
Isadirectory : False
Rozszerzenie pliku : .csv
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-10 17:21:56
Znalazłem następujące polecenia zwrócą pełną ścieżkę katalogu nadrzędnego skryptu Pythona 3.6.
Skrypt Pythona 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}')
Linki objaśniające: .resolve(), .bezwzględne(), Path ( Plik ).rodzic ().bezwzględne()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-12 18:20:52
Aby zachować spójność migracji między platformami (macOS / Windows/Linux), spróbuj:
path = r'%s' % os.getcwd().replace('\\','/')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-12 07:33:14
Zrobiłem funkcję do użycia podczas uruchamiania Pythona pod IIS w CGI w celu uzyskania bieżącego folderu:
import os
def getLocalFolder():
path=str(os.path.dirname(os.path.abspath(__file__))).split('\\')
return path[len(path)-1]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-27 10:35:11
## 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-06 08:47:33
Załóżmy, że masz następującą strukturę katalogów:-
Główna/ 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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-10 05:46:32
System: MacOS
Wersja: Python 3.6 w / Anaconda
import os
rootpath = os.getcwd()
os.chdir(rootpath)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-11 06:54:47
Jeśli chcesz zobaczyć bieżący katalog roboczy
import os
print(os.getcwd())
Jeśli chcesz zmienić bieżący katalog roboczy
os.chdir(path)
Path jest łańcuchem znaków zawierającym wymaganą ścieżkę do przeniesienia. np.
path = "C:\\Users\\xyz\\Desktop\\move here"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-01 05:35:30