Šajā rakstā mēs apskatīsim, kā iegūt un mainīt darba direktoriju programmā Python. Strādājot ar failu apstrāde jūs, iespējams, pamanījāt, ka uz failiem ir atsauces tikai pēc to nosaukumiem, piemēram, “GFG.txt” un, ja fails neatrodas skripta direktorijā, Python rada kļūdu. Jēdziens par Pašreizējais darba direktorijs (CWD) šeit kļūst svarīga. Apsveriet CWD kā mapi, kurā darbojas Python. Ikreiz, kad faili tiek izsaukti tikai pēc to nosaukuma, Python pieņem, ka tas sākas CWD, kas nozīmē, ka atsauce tikai uz nosaukumu būs veiksmīga tikai tad, ja fails atrodas Python CWD.
Piezīme: Mape, kurā darbojas Python skripts, ir pazīstama kā Pašreizējais direktorijs. Tas var nebūt ceļš, kurā atrodas Python skripts.
Kas ir Python OS modulis?
Python nodrošina OS modulis mijiedarbībai ar operētājsistēmu. Šis modulis ietilpst Python standarta utilīta modulī. Visas OS moduļa funkcijas tiek paaugstinātas OSERror ja ir nederīgi vai nepieejami failu nosaukumi un ceļi, vai citi argumenti, kuriem ir pareizais tips, bet kurus operētājsistēma nepieņem.
Python Atrodiet pašreizējo direktoriju
Iegūstiet pašreizējā Python skripta direktoriju, izmantojot sys.argv[0]
Šajā piemērā mēs izmantojām sys.argv[0] lai izgūtu skripta faila ceļu un os.path.dirname() izvelk pašreizējo direktoriju no ceļa.
Python3
import> os> import> sys> script_directory> => os.path.dirname(os.path.abspath(sys.argv[> 0> ]))> print> (script_directory)> |
>
>
Izvade:

Iegūstiet pašreizējā Python skripta direktoriju
Iegūstiet pašreizējā Python skripta direktoriju, izmantojot pārbaudes moduli
Šajā piemērā mēs izmantojām inspect.getfile(inspect.currentframe()) kas atgriež pašreizējā skripta faila ceļu, un os.path.dirname() izvelk pašreizējo direktoriju no ceļa.
Python3
import> inspect> import> os> script_directory> => os.path.dirname(os.path.abspath(> > inspect.getfile(inspect.currentframe())))> > print> (script_directory)> |
>
>
Izvade:
atšifrēt base64 javascript

Iegūstiet pašreizējā Python skripta direktoriju
Iegūstiet pašreizējo darba direktoriju, izmantojot os.getcwd()
Šajā piemērā mēs izmantojām os.getcwd() lai iegūtu pašreizējo Python skripta direktoriju.
Python3
import> os> > print> (> 'File location using os.getcwd():'> , os.getcwd())> |
>
>
Izvade:
Java sinhronizācija
File location using os.getcwd(): /home/tuhingfg/Documents/Scripts>
Piezīme: Izmantojot os.getcwd() nedarbojas, kā paredzēts, palaižot Python kodu no cita direktorija no Python skripta.
Negaidīts rezultāts, palaižot Python skriptu no cita direktorija, kas nav skripts, izmantojot os.getcwd()
Python skripts ir ievietots iekšā /home/tuhingfg/Documents/Scripts . Kad mēs palaižam skriptu no tās pašas mapes, tas norāda pareizo skripta atrašanās vietu. Bet, kad mēs mainām savu direktoriju uz kādu citu vietu, tas izvada šī direktorija atrašanās vietu. Tas ir tāpēc, ka os.getcwd() ņem vērā direktoriju, no kuras mēs izpildām skriptu. Pamatojoties uz to, rezultāts os.getcwd() arī atšķiras.
Python3
import> os> > print> (> 'File location using os.getcwd():'> , os.getcwd())> |
>
>
Izvade:

Iegūstiet skripta atrašanās vietu, izmantojot os.getcwd()
Iegūstiet Python skripta atrašanās vietu, izmantojot os.path.realpath() metodi
os.path.realpath() var izmantot, lai iegūtu pašreizējā Python skripta ceļu. Faktiski Python metode os.path.realpath() tiek izmantota, lai iegūtu norādītā faila nosaukuma kanonisko ceļu, likvidējot visas šajā ceļā sastopamās simboliskās saites. Īpašs mainīgais __fails__ tiek nodots realpath() metode, lai iegūtu Python skripta ceļu.
Šajā piemērā os.getcwd() un __fails__ sniedz divus dažādus rezultātus. Tā kā mēs izpildām skriptu no citas mapes, nevis skriptu, os.getcwd() izvade ir mainīta atbilstoši skripta izpildes mapei. Bet __fails__ ģenerē nemainīgu rezultātu neatkarīgi no pašreizējā darba direktorija.
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__))}'> )> |
>
>
Izvade:

Iegūstiet direktoriju, izmantojot Python
Piezīme: __file__ ir faila ceļa nosaukums, no kura modulis tika ielādēts, ja tas tika ielādēts no faila.