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\\'
Author: codeforester, 2010-08-07

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

  1. pathlib w dokumentacji Pythona.
  2. os.ścieżka 2.7, os.ścieżka 3.8
  3. os.getcwd 2.7, os.getcwd 3.8
  4. co oznacza zmienna _ _ file_ _ / do?
 1933
Author: Bryan Oakley,
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().

 118
Author: Ron Kalian,
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).

 57
Author: Arminius,
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__)
 11
Author: chefsmart,
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__))
 8
Author: Akshaya Natarajan,
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.

 3
Author: Alejandro Galera,
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
 3
Author: Nafeez Quraishi,
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

 3
Author: Arpan Saini,
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()

 3
Author: Sun Bear,
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('\\','/')
 1
Author: Qiao Zhang,
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]
 1
Author: Gil Allen,
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
 1
Author: Jerusalem Programmer,
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)
 1
Author: dPac,
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)
 0
Author: Suyang Xu,
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"
 0
Author: majid bhatti,
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