logo

Få aktuell katalog i Python

I den här artikeln kommer vi att täcka hur du får och ändrar arbetskatalogen i Python. När du arbetar med filhantering du kanske har märkt att filer endast refereras av deras namn, t.ex. 'GFG.txt' och om filen inte finns i katalogen för skriptet, visar Python ett fel. Konceptet med Current Working Directory (CWD) blir viktig här. Betrakta CWD som mappen, Python fungerar inuti. Närhelst filerna endast anropas med deras namn, antar Python att den startar i CWD, vilket betyder att en referens endast för namn kommer att lyckas endast om filen finns i Pythons CWD.

Notera: Mappen där Python-skriptet körs kallas Current Directory. Det här kanske inte är sökvägen där Python-skriptet finns.



Vad är Python OS-modulen?

Python tillhandahåller en os-modul för att interagera med operativsystemet. Denna modul ingår i Pythons standardverktygsmodul. Alla funktioner i os-modulen höjs OSError i fallet med ogiltiga eller otillgängliga filnamn och sökvägar, eller andra argument som har rätt typ men som inte accepteras av operativsystemet.

Python Hitta aktuell katalog

Skaffa en katalog över det aktuella Python-skriptet med sys.argv[0]

I det här exemplet har vi använt sys.argv[0] för att hämta sökvägen till skriptfilen och os.path.dirname() extraherar den aktuella katalogen från sökvägen.

Python3








import> os> import> sys> script_directory>=> os.path.dirname(os.path.abspath(sys.argv[>0>]))> print>(script_directory)>

>

>

Utgång:

Hämta katalog med nuvarande Python-skript

Skaffa en katalog med det aktuella Python-skriptet

Skaffa katalogen för det aktuella Python-skriptet med Inspect Module

I det här exemplet har vi använt inspect.getfile(inspect.currentframe()) som returnerar sökvägen till den aktuella skriptfilen, och os.path.dirname() extraherar den aktuella katalogen från sökvägen.

Python3




import> inspect> import> os> script_directory>=> os.path.dirname(os.path.abspath(> >inspect.getfile(inspect.currentframe())))> > print>(script_directory)>

>

>

Utgång:

storleken på pyton
Hämta katalog med nuvarande Python-skript

Hämta katalog med nuvarande Python-skript

Hämta den aktuella arbetskatalogen med os.getcwd()

I det här exemplet har vi använt os.getcwd() för att få aktuell katalog för Python-skriptet.

Python3




import> os> > print>(>'File location using os.getcwd():'>, os.getcwd())>

>

>

Utgång:

File location using os.getcwd(): /home/tuhingfg/Documents/Scripts>

Notera: Använder sig av os.getcwd() fungerar inte som förväntat när du kör Python-koden från en annan katalog än Python-skriptet.

Oväntat resultat när Python-skript körs från en annan katalog än skript med os.getcwd()

Python-skriptet placeras inuti /home/tuhingfg/Documents/Scripts . När vi kör skriptet inifrån samma mapp ger det rätt skriptplats. Men när vi ändrar vår katalog till någon annan plats, matar den ut platsen för den katalogen. Det här är för att os.getcwd() tar hänsyn till katalogen där vi kör skriptet. Baserat på detta, resultatet av os.getcwd() varierar också.

Python3




import> os> > print>(>'File location using os.getcwd():'>, os.getcwd())>

>

>

Produktion:

Hämta skriptets plats med os.getcwd()

Hämta skriptets plats med os.getcwd()

Hämta Python-skriptets plats med metoden os.path.realpath()

os.path.realpath() kan användas för att få sökvägen till det aktuella Python-skriptet. Faktum är att metoden os.path.realpath() i Python används för att få den kanoniska sökvägen till det angivna filnamnet genom att eliminera alla symboliska länkar som påträffas i sökvägen. En speciell variabel __fil__ överförs till realpath() metod för att få sökvägen till Python-skriptet.

I det här exemplet är os.getcwd() och __fil__ ger två olika resultat. Eftersom vi kör skriptet från en annan mapp än skriptet, os.getcwd() utdata har ändrats i enlighet med mappen för körning av skriptet. Men __fil__ genererar det konstanta resultatet oberoende av den aktuella arbetskatalogen.

Python3




import> os> > print>(>'File location using os.getcwd():'>,> >os.getcwd())> > print>(f>'File location using __file__ variable:'>+> >'{os.path.realpath(os.path.dirname(__file__))}'>)>

>

>

Produktion:

js settimeout
Skaffa Python-katalogen

Skaffa en katalog med Python

Obs: __fil__ är sökvägen till filen som modulen laddades från om den laddades från en fil.