W tym artykule omówimy, jak uzyskać i zmienić katalog roboczy w Pythonie. Podczas pracy z Obsługa plików mogłeś zauważyć, że do plików odnoszą się tylko ich nazwy, np. „GFG.txt” i jeśli plik nie znajduje się w katalogu skryptu, Python zgłasza błąd. Koncepcja Aktualny katalog roboczy (CWD) staje się tu ważne. Rozważ CWD jako folder, w którym działa Python. Ilekroć pliki są wywoływane tylko według nazwy, Python zakłada, że zaczyna się w CWD, co oznacza, że odwołanie oparte wyłącznie na nazwie będzie skuteczne tylko wtedy, gdy plik znajduje się w CWD Pythona.
Notatka: Folder, w którym działa skrypt Pythona, nazywany jest katalogiem bieżącym. Może to nie być ścieżka, w której znajduje się skrypt Pythona.
Co to jest moduł operacyjny Pythona?
Python zapewnia moduł systemu operacyjnego do interakcji z systemem operacyjnym. Moduł ten należy do standardowego modułu narzędziowego Pythona. Wszystkie funkcje w module os podnoszą OSEBłąd w przypadku nieprawidłowych lub niedostępnych nazw plików i ścieżek lub innych argumentów, które mają poprawny typ, ale nie są akceptowane przez system operacyjny.
Python Znajdź bieżący katalog
Uzyskaj katalog bieżącego skryptu Pythona za pomocą sys.argv[0]
W tym przykładzie użyliśmy sys.argv[0] aby pobrać ścieżkę pliku skryptu i os.ścieżka.nazwakatalogu() wyodrębnia bieżący katalog ze ścieżki.
Python3
import> os> import> sys> script_directory> => os.path.dirname(os.path.abspath(sys.argv[> 0> ]))> print> (script_directory)> |
>
>
Wyjście :

Pobierz katalog bieżącego skryptu Pythona
Uzyskaj katalog bieżącego skryptu Pythona za pomocą modułu Inspect
W tym przykładzie użyliśmy inspekcja.getfile(inspect.currentframe()) który zwraca ścieżkę bieżącego pliku skryptu, oraz os.ścieżka.nazwakatalogu() wyodrębnia bieżący katalog ze ścieżki.
Python3
import> inspect> import> os> script_directory> => os.path.dirname(os.path.abspath(> > inspect.getfile(inspect.currentframe())))> > print> (script_directory)> |
>
>
Wyjście :
krotki Java

Pobierz katalog bieżącego skryptu Pythona
Pobierz bieżący katalog roboczy za pomocą os.getcwd()
W tym przykładzie użyliśmy os.getcwd() aby uzyskać bieżący katalog skryptu Python.
Python3
import> os> > print> (> 'File location using os.getcwd():'> , os.getcwd())> |
>
>
Wyjście :
File location using os.getcwd(): /home/tuhingfg/Documents/Scripts>
Notatka: Za pomocą os.getcwd() nie działa zgodnie z oczekiwaniami, gdy kod Pythona jest uruchamiany z innego katalogu niż skrypt Pythona.
Nieoczekiwany wynik podczas uruchamiania skryptu Pythona z innego katalogu niż skrypt przy użyciu os.getcwd()
Wewnątrz znajduje się skrypt Pythona /home/tuhingfg/Dokumenty/Skrypty . Gdy uruchomimy skrypt z tego samego folderu, zostanie podana poprawna lokalizacja skryptu. Ale kiedy zmieniamy nasz katalog na inne miejsce, wyświetlana jest lokalizacja tego katalogu. To dlatego, że os.getcwd() uwzględnia katalog, z którego wykonujemy skrypt. Na tej podstawie wynik os.getcwd() też się różni.
Python3
import> os> > print> (> 'File location using os.getcwd():'> , os.getcwd())> |
>
>
Wyjście:

Uzyskaj lokalizację skryptu za pomocą os.getcwd()
Uzyskaj lokalizację skryptu Pythona za pomocą metody os.path.realpath().
Funkcja os.path.realpath() może zostać użyta do uzyskania ścieżki bieżącego skryptu Pythona. W rzeczywistości metoda os.path.realpath() w Pythonie służy do uzyskania ścieżki kanonicznej określonej nazwy pliku poprzez wyeliminowanie wszelkich dowiązań symbolicznych napotkanych w ścieżce. Specjalna zmienna __plik__ zostaje przekazany do realpath() metodę uzyskania ścieżki skryptu Pythona.
W tym przykładzie os.getcwd() I __plik__ podać dwa różne wyniki. Ponieważ wykonujemy skrypt z innego folderu niż skrypt, os.getcwd() dane wyjściowe zmieniły się w zależności od folderu wykonania skryptu. Ale __plik__ generuje stały wynik niezależnie od bieżącego katalogu roboczego.
Python3
obrazy przecen
import> os> > print> (> 'File location using os.getcwd():'> ,> > os.getcwd())> > print> (f> 'File location using __file__ variable:'> +> > '{os.path.realpath(os.path.dirname(__file__))}'> )> |
>
>
Wyjście:

Uzyskaj katalog za pomocą Pythona
Uwaga: __plik__ jest ścieżką do pliku, z którego załadowano moduł, jeśli został załadowany z pliku.