Pythoni failiteed: os.path ja pathlib kasutamine, erinevused ja parimad tavad

目次

1. Python Pathi ülevaade ja olulisus

Põhitõed failiteede haldamisest Pythonis

Pythonis on “tee” marsruut, mis näitab faili või kausta asukohta ning mängib olulist rolli arvuti failisüsteemis. Näiteks, kui avate faili konkreetses kaustas või töötlete faile programmiga, tekib viga, kui tee pole õigesti määratud. Seega on teede haldamise mõistmine üks programmeerimise põhioskusi.

Pythoni puhul on failiteede haldamiseks mitu moodulit. Kõige tuntumad neist on os.path ja pathlib moodulid. Nende õige kasutamine võimaldab tõhusalt faile hallata ning tagada ühilduvuse erinevate operatsioonisüsteemide vahel.

Absoluutsed ja suhtelised teed

Teid on kahte tüüpi: “absoluutne tee” ja “suhteline tee”.

  • Absoluutne tee näitab täisteed süsteemi juurkaustast, võimaldades igast kaustast pääseda soovitud failini. Näiteks Windowsis C:UsersYourNameDocumentsfile.txt kujul.
  • Suhteline tee näitab asukohta praegusest töökataloogist (current working directory). Näiteks kui töökataloog on C:UsersYourName, siis suhtelise teena Documentsfile.txt pääseb samale failile.

Failiteede haldamise olulisus Pythonis

Kui töötlete faile Pythoniga, on oluline osata käsitleda erinevate platvormide teede eripärasid. Näiteks Windowsis on tee eraldajaks “\”, kuid Linuxis ja macOS-is “/”. os.path ja pathlib moodulid aitavad neid erinevusi varjata ja võimaldavad luua ristplatvormseid skripte.

2. Põhilised teeoperatsioonid: os.path moodul

Mis on os.path moodul?

os.path moodul kuulub Pythoni standardteeki ning pakub mugavaid tööriistu failide ja kaustade teedega töötamiseks. See moodul sisaldab põhifunktsioone, nagu faili olemasolu kontrollimine, teede ühendamine ning failinimede hankimine. Lisaks varjab ta automaatselt erinevate operatsioonisüsteemide tee eraldaja erinevused, mis muudab arenduse mugavamaks.

Olulisemad funktsioonid

Faili või kausta olemasolu kontroll: os.path.exists()

os.path.exists() kontrollib, kas antud tee eksisteerib. Kui fail või kaust eksisteerib, tagastab True, kui mitte, siis False. Näiteks:

import os

path = "/path/to/file.txt"

if os.path.exists(path):
    print("Fail eksisteerib.")
else:
    print("Faili ei leitud.")

Teede ühendamine: os.path.join()

os.path.join() ühendab mitu teed õigesti, arvestades operatsioonisüsteemi eripära. Näiteks:

import os

dir_path = "/path/to/directory"
file_name = "file.txt"

full_path = os.path.join(dir_path, file_name)
print(full_path)  # /path/to/directory/file.txt

Failinime ja kaustanime hankimine: os.path.basename() ja os.path.dirname()

os.path.basename() annab failinime tee lõpust, os.path.dirname() tagastab kaustanime. Näide:

import os

path = "/path/to/directory/file.txt"

file_name = os.path.basename(path)
dir_name = os.path.dirname(path)

print(file_name)  # file.txt
print(dir_name)   # /path/to/directory

Näide os.path mooduli kasutamisest

Näide, kuidas os.path mooduliga kontrollida faili olemasolu, ühendada teid ja saada failinimi ja kaustanimi:

import os

# Teede ühendamine
base_dir = "/user/local"
file_name = "example.txt"
full_path = os.path.join(base_dir, file_name)

# Faili olemasolu kontroll
if os.path.exists(full_path):
    print(f"{full_path} eksisteerib.")
else:
    print(f"{full_path} ei eksisteeri.")

# Failinimi ja kaustanimi
print("Failinimi:", os.path.basename(full_path))
print("Kaustanimi:", os.path.dirname(full_path))

 

3. Kaasaegne teehaldus: pathlib moodul

pathlib mooduli ülevaade

pathlib on moodul, mis lisati Python 3.4-st alates ning võimaldab failiteid käsitleda objektorienteeritult. Erinevalt os.path-ist, kus teed on lihtsalt stringid, kasutatakse pathlib-is teeobjekte. See teeb koodi loetavamaks ja hooldatavamaks.

pathlib põhiline kasutus

Teede loomine ja ühendamine

pathlib-is kasutatakse Path objekti. Tee loomine:

from pathlib import Path

# Tee loomine
path = Path("/user/local/example.txt")
print(path)

Teede ühendamiseks saab kasutada / operaatorit (os.path.join() analoog):

from pathlib import Path

# Teede ühendamine
base_dir = Path("/user/local")
file_name = "example.txt"
full_path = base_dir / file_name
print(full_path)  # /user/local/example.txt

Faili või kausta olemasolu kontroll

Faili või kausta olemasolu saab kontrollida exists() meetodiga. Lisaks saab is_file() ja is_dir() abil tuvastada, kas tee on fail või kaust.

from pathlib import Path

path = Path("/user/local/example.txt")

if path.exists():
    print("Fail või kaust eksisteerib.")

if path.is_file():
    print("See on fail.")

if path.is_dir():
    print("See on kaust.")

Absoluut- ja suhtelised teed

pathlib võimaldab hõlpsalt teisendada suhtelist teed absoluutseks resolve() abil:

from pathlib import Path

relative_path = Path("example.txt")
absolute_path = relative_path.resolve()
print(absolute_path)  # /full/path/to/example.txt

Vastupidi, absoluutse tee saab muuta suhteliseks relative_to() abil:

from pathlib import Path

absolute_path = Path("/user/local/example.txt")
relative_path = absolute_path.relative_to("/user")
print(relative_path)  # local/example.txt

pathlib eelised

pathlib suurim eelis on objektorienteeritud lähenemine, mis teeb koodi intuitiivsemaks ning lihtsustab mitme funktsiooni meeldejätmist. Samuti on pathlib veelgi paremini kohandatud erinevatele platvormidele kui os.path.

4. Keskkonnamuutuja PYTHONPATH kasutamine

Mis on PYTHONPATH?

PYTHONPATH on keskkonnamuutuja, mida Python kasutab moodulite ja pakettide otsimiseks. Tavaliselt otsib Python mooduleid sys.path alusel, kuid PYTHONPATH seadistamisega saab eelistada konkreetseid katalooge. See on mugav, kui projektis kasutatakse kohandatud mooduleid või erinevaid raamatukogusid.

Kuidas seadistada PYTHONPATH?

Ajutine seadistus käsureal

Ajutiselt saab PYTHONPATH määrata käsureal:

  • Linux/macOS:
export PYTHONPATH=/path/to/directory:$PYTHONPATH
python script.py
  • Windows:
set PYTHONPATH=C:pathtodirectory;%PYTHONPATH%
python script.py

See seadistus kaob terminali sulgemisel – sobib ajutiseks kasutamiseks.

Püsiv seadistus

Püsivaks kasutamiseks lisa käsk shelli seadistustefaili (.bashrc, .zshrc):

  • Linux/macOS:
    Lisa alljärgnev oma shelli seadistusfaili.
  export PYTHONPATH=/path/to/directory:$PYTHONPATH
  • Windows:
    Lisa PYTHONPATH süsteemi keskkonnamuutujatesse (“System Properties” → “Environment Variables” → “User variables”).

Nii kehtestub PYTHONPATH iga terminali avamisel.

PYTHONPATH kasutusnäide

Kui projektis on mitu kataloogi, saab PYTHONPATH abil hõlpsalt importida erinevatest kataloogidest mooduleid. Näiteks sellise struktuuriga projektis:

/my_project/
│
├── /src/
│   └── my_module.py
│
└── /lib/
    └── my_library.py

Lisa src ja lib PYTHONPATH väärtusele:

export PYTHONPATH=/my_project/src:/my_project/lib

Nüüd saab mõlemaid mooduleid importida:

from my_module import my_function
from my_library import my_library_function

Olulised märkused ja parimad tavad

PYTHONPATH seadistamisel jälgi, et väärtuses poleks dubleerivaid teid, et vältida ootamatut käitumist.

echo $PYTHONPATH

Arenduses on PYTHONPATH mugav, kuid tootmises soovitatakse kasutada virtuaalset keskkonda (virtualenv või venv), et hoida sõltuvused projektipõhiselt eraldi.

侍エンジニア塾

5. os.path ja pathlib kasutusvaldkonnad

os.path ja pathlib erinevused

Pythonis on failiteede haldamiseks kaks peamist moodulit: os.path ja pathlib. Mõlemal on oma eelised ning kasutusolukord sõltub projektist.

os.path iseloomustus

os.path on traditsiooniline moodul, mis on kasutusel juba Python 2.x ajast. Teedega töötatakse stringidena ja kasutatakse funktsioone. Põhijooned:

  • Lihtne ja kergekaaluline: Vähe koodi, kiire töö.
  • Ristplatvormiline: Toimib nii Windowsis, Linuxis kui macOS-is.
  • Töötleb teid kui stringe: Sobib lihtsateks ülesanneteks, kuid suurtel projektidel võib kood muutuda keeruliseks.

pathlib iseloomustus

pathlib on Python 3.4+ moodul, mis võimaldab failiteid käsitleda objektidena. Peamised eelised:

  • Objektorienteeritud: Path-objektid võimaldavad mugavat meetodite ahelat ja loetavat koodi.
  • Intuitiivsed operaatorid: Teede ühendamiseks saab kasutada / operaatorit.
  • Paindlik ja võimas: Sobib keerukamateks operatsioonideks, kood jääb lühem ja selgem.

Kasutusolukorrad

Millal eelistada os.path moodulit?

  1. Vajadus Python 2.x toe järele või vanemates projektides: os.path töötab ka Python 2.x keskkonnas.
  2. Väikesed skriptid: Lihtsate ülesannete jaoks on os.path kiire ja lihtne.

Millal eelistada pathlib moodulit?

  1. Uued projektid Python 3.x-s: Alates Python 3.4-st eelistada pathlib moodulit.
  2. Keerulised teehaldusvajadused: Mitme tee või erinevate OS-ide korral pathlib on mugav.
  3. Suured projektid ja loetavus: Objektorienteeritud kood on hooldatavam.

os.path ja pathlib võrdlustabel

Omadusos.pathpathlib
AndmetüüpStringPath-objekt
Mooduli vanusAlates Python 2.xAlates Python 3.4
Operatsioonide tüüpFunktsioonidObjektorienteeritud
Teede ühendamineos.path.join()/ operaator
Absoluutse tee saamineos.path.abspath()Path.resolve()
Soovituslik kasutusLihtsad skriptid, vanad projektidKeerukad operatsioonid, uued projektid

Kokkuvõte: millal mida kasutada?

Python 3.4+ projektides soovitatakse kasutada pathlib moodulit, sest see pakub intuitiivsemat ja hooldatavamat lähenemist. os.path sobib hästi vanadele või väikestele projektidele, kus ühilduvus on oluline.

6. Korduma kippuvad küsimused (FAQ)

Siin on vastused Pythonis teede käsitlemise kohta sageli esitatavatele küsimustele.

1. Kuidas saada teada praegune töökataloog Pythonis?

Seda saab teha kas os või pathlib mooduliga:

  • Kasutades os moodulit:
import os
current_directory = os.getcwd()
print(current_directory)
  • Kasutades pathlib moodulit:
from pathlib import Path
current_directory = Path.cwd()
print(current_directory)

Mõlemad meetodid annavad praeguse töökataloogi.

2. Kuidas luua kataloogi, kui see puudub?

Selleks saab kasutada os.makedirs() või pathlib.Path.mkdir():

  • Kataloogi loomine os mooduliga:
import os
dir_path = "/path/to/directory"
if not os.path.exists(dir_path):
    os.makedirs(dir_path)
  • Kataloogi loomine pathlib mooduliga:
from pathlib import Path
dir_path = Path("/path/to/directory")
if not dir_path.exists():
    dir_path.mkdir(parents=True, exist_ok=True)

Eriti mugav on pathlib-i puhul parents=True kasutada, mis loob vajadusel ka ülemkaustad.

3. Mis vahe on absoluutsel ja suhtelisel teel?

  • Absoluutne tee: Algab juurkataloogist (Windowsis C:, Linuxis/macOS-is /) ja näitab täielikku asukohta.
  • Suhteline tee: Viitab asukohale praegusest töökataloogist. Kui töökataloog on /home/user, siis docs/file.txt tähendab /home/user/docs/file.txt.

Absoluutne tee näitab alati üht kindlat kohta; suhteline tee sõltub töökataloogist.

4. Kas võib kasutada korraga nii os.path kui pathlib moodulit?

Jah, võib. Kuid soovitatav on kogu projektis kasutada ühtset stiili – suuremates projektides on pathlib sageli eelistatud.

5. Miks ei tohiks teid ühendada “+” operaatoriga, vaid kasutada os.path.join() või pathlib-i “/” operaatorit?

“+” abil ühendades tekib OS-spetsiifiliste eraldajate tõttu probleeme (nt Windowsis “\” ja Linuxis “/”). Kasutades os.path.join() või pathlib / operaatorit, tagatakse koodi ühilduvus kõikidel platvormidel.

Näide “+” kasutamisel (ei ole soovitatav):

# Käsitsi ühendamine (mitte soovitatav)
path = "/user/local" + "/" + "example.txt"

Soovitatav viis:

# os.path kasutamine
import os
path = os.path.join("/user/local", "example.txt")

# pathlib kasutamine
from pathlib import Path
path = Path("/user/local") / "example.txt"

 

侍エンジニア塾