Timp de mulți ani, lucrul cu fișiere și directoare în Python se baza pe funcții procedurale dispersate în modulul os.path (cum ar fi os.path.join, os.path.exists, os.path.splitext). Modulul pathlib oferă o abordare curată, orientată pe obiecte, unde o cale de fișier este un obiect de primă clasă (Path) compatibil nativ pe Windows, Linux și macOS, eliminând definitiv problemele cu separatoarele de directoare (/ vs \).
os.path (procedural) vs. pathlib.Path (orientat pe obiecte)
import os
from pathlib import Path
# METODA VECHE CU os.path:
cale_veche = os.path.join(os.path.dirname(__file__), "config", "setari.json")
if os.path.exists(cale_veche):
with open(cale_veche, "r") as f:
date = f.read()
# METODA MODERNĂ CU pathlib.Path:
# Operatorul slash (/) este suprascris pentru a concatena căi în mod elegant!
cale_moderna = Path(__file__).parent / "config" / "setari.json"
if cale_moderna.exists():
# Citire directă fără blocuri de 'with open()':
date = cale_moderna.read_text(encoding="utf-8")
print(f"Fișier încărcat cu succes din {cale_moderna.resolve()}")
Operațiuni Rapide de I/O pe Obiecte Path
Nu mai este nevoie să deschideți manual un fișier doar pentru o operațiune simplă de citire sau scriere:
cale.read_text(encoding="utf-8"): Deschide, citește tot conținutul ca string și închide automat fișierul.cale.write_text("Text nou", encoding="utf-8"): Deschide, scrie șirul și închide fișierul.cale.read_bytes()șicale.write_bytes(date_binare): Pentru fișiere binare (imagini, arhive).
Căutare recursivă de fișiere cu rglob()
folder_proiect = Path("/var/www/dexblog")
# Găsește toate fișierele .py din proiect, inclusiv din subdirectoare:
fisiere_python = list(folder_proiect.rglob("*.py"))
print(f"Găsite {len(fisiere_python)} fișiere Python.")
for p in fisiere_python:
# Proprietăți utile ale obiectului Path:
print(f"Nume: {p.name} | Extensie: {p.suffix} | Director părinte: {p.parent.name}")
Crearea și Ștergerea Structurilor de Directoare
nou_folder = Path("./output/rapoarte/2026/octombrie")
# Creează automat toate directoarele părinte lipsă (parents=True)
# și nu aruncă eroare dacă folderul există deja (exist_ok=True):
nou_folder.mkdir(parents=True, exist_ok=True)