Manipularea Modernă a Sistemului de Fișiere cu pathlib.Path în Python

Căi (pathlib) Python 3.4+ & 3.12+

Ghid complet pentru modulul modern pathlib în Python: de ce Path înlocuiește os.path, concatenarea cu operatorul slash (/), căutare recursivă rglob și citire rapidă fără open().

Sintaxă
from pathlib import Path
fisier = Path.home() / 'proiect' / 'date.json'
continut = fisier.read_text(encoding='utf-8')

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() și cale.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)