2010-08-07 21 views
417

Chcę uzyskać ścieżkę do katalogu bieżącego pliku.
Próbowałem:Jak uzyskać pełną ścieżkę do katalogu bieżącego pliku w Pythonie?

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

Ale w jaki sposób można odzyskać ścieżkę katalogu użytkownika? Na przykład:

'C:\\python27\\' 
+3

możliwe duplikat [Znajdź bieżącego katalogu i katalogu plików'S] (http: // stackoverflow .com/questions/5137497/find-current-directory-and-files-directory) – user2284570

+4

'__file__' nie jest zdefiniowany podczas uruchamiania Pythona jako powłoki interaktywnej. Pierwszy fragment kodu w twoim pytaniu wygląda tak, jakby pochodził z interaktywnej powłoki, ale w rzeczywistości wygenerowałby 'NameError', przynajmniej na pythonie 2.7.3, ale także inne, jak sądzę. – drevicko

Odpowiedz

889

Jeśli masz na myśli katalog skryptu jest prowadzony:

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

Jeśli masz na myśli bieżący katalog roboczy:

import os 
os.getcwd() 

Należy pamiętać, że przed i po file to dwa podkreślenia, a nie tylko jeden.

+29

abspath() jest obowiązkowy, jeśli nie chcesz odkrywać dziwnych zachowań w oknach, gdzie dirname (__ file__) może zwracać pusty ciąg znaków! – sorin

+4

powinno być os.path.dirname (os.path.abspath (os .__ file__))? – DrBailey

+1

@drbailey: nie. Co sprawia, że ​​myślisz, że powinno? –

7
import os 
print os.path.dirname(__file__) 
+18

Niestety ale ta odpowiedź jest niepoprawna, poprawna to ta stworzona przez Bryan 'dirname (abspath (__ file__)). Zobacz komentarze, aby poznać szczegóły. – sorin

+1

To da '/' jako wyjście – Tripathi29

4

Można użyć os i os.path bibliotekę łatwo następująco

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

os.path.dirname powraca górny katalog z aktualną. Pozwala nam przejść na wyższy poziom bez przekazywania argumentów pliku i bez znajomości bezwzględnej ścieżki.

+4

To nie daje katalogu bieżącego _file_. Zwraca katalog bieżącego katalogu roboczego, który może być zupełnie inny. To, co sugerujesz, działa tylko wtedy, gdy plik znajduje się w bieżącym katalogu roboczym. –

0

IPython ma magiczne polecenie %pwd, aby uzyskać bieżący katalog roboczy. Może być stosowany w następujący sposób:

from IPython.terminal.embed import InteractiveShellEmbed 

ip_shell = InteractiveShellEmbed() 

present_working_directory = ip_shell.magic("%pwd") 

Na ipython Jupyter Notebook %pwd może być stosowany bezpośrednio w następujący sposób:

present_working_directory = %pwd 
Powiązane problemy