Ce face Path.resolve(), absolute(), relative_to() și verificările de cale
resolve() dă calea absolută, cu legăturile simbolice și .. rezolvate. absolute() doar adaugă directorul curent în față, fără să rezolve nimic. expanduser() înlocuiește ~. is_absolute() verifică dacă o cale este absolută, iar samefile() dacă două căi indică același fișier.
relative_to(baza) dă calea relativă față de baza și aruncă ValueError dacă nu se află sub ea; cu walk_up=True (3.12+) poate urca cu ... is_relative_to() (3.9+) verifică dacă o cale se află sub alta, util pentru a bloca accesul în afara unui director permis. is_reserved() verifică numele rezervate din Windows (NUL, CON), dar este învechită din 3.13; folosește os.path.isreserved().
Ce returnează
Căi noi, sau True/False pentru verificări.
Exemple
Exemplul 1: Căi relative și verificare de securitate
from pathlib import PurePosixPath as P
from os.path import normpath
radacina = P("/srv/site/public")
for cerut in ["img/logo.png", "../../etc/passwd"]:
cale = P(normpath(radacina / cerut))
print(cale, cale.is_relative_to(radacina))
print(P("/srv/site/public/css/a.css").relative_to(radacina))
print(P("/srv/backup").relative_to(radacina, walk_up=True))
print(P("/etc").is_absolute(), P("date").is_absolute())
Rezultat
/srv/site/public/img/logo.png True
/srv/etc/passwd False
css/a.css
../../backup
True False
Exemplul 2: resolve, absolute, samefile
from pathlib import Path
Path("doc.txt").touch()
Path("scurt").symlink_to("doc.txt")
print(Path("scurt").resolve().name, Path("scurt").absolute().name)
print(Path("scurt").samefile("doc.txt"))
print(Path("./a/../doc.txt").resolve() == Path("doc.txt").resolve())
import os
os.environ["HOME"] = "/home/ana"
print(Path("~/poze").expanduser())
Rezultat
doc.txt scurt
True
True
/home/ana/poze
Exemplul 3: Nume rezervate în Windows (metodă învechită)
from pathlib import PureWindowsPath
print(PureWindowsPath("nul").is_reserved())
Rezultat (cu avertismentul afișat de Python 3.13+)
exemplu.py:2: DeprecationWarning: pathlib.PurePath.is_reserved() is deprecated and scheduled for removal in Python 3.15. Use os.path.isreserved() to detect reserved paths on Windows.
True
Greșeli frecvente
- Verifici că o cale cerută de utilizator este sub directorul permis fără să rezolvi
.../srv/public/../../etctrece de un test pe text; rezolvă calea întâi.
Comenzi înrudite
os.path.abspath(), realpath(), normpath(), normcase(): Transformă o cale în cale absolută, rezolvă legăturile simbolice și curăță părțile ca „..”.os.path.relpath(), commonpath() și commonprefix(): Calea relativă de la un director la altul și partea comună a mai multor căi.os.path.samefile(), sameopenfile() și samestat(): Verifică dacă două căi (sau două fișiere deschise) se referă la același fișier de pe disc.