Ce face os.path.samefile(), sameopenfile() și samestat()
Două căi diferite pot indica același fișier: prin legături simbolice, legături fizice (hard link) sau scrieri diferite ale aceleiași căi. samefile() compară dispozitivul și numărul inode al fișierelor, nu textul căilor.
sameopenfile() face același lucru pentru descriptori de fișiere deschise, iar samestat() pentru rezultate os.stat() deja obținute.
Parametri
| Parametru | Descriere |
|---|---|
cale1, cale2 / fd1, fd2 / stat1, stat2 |
Cele două fișiere comparate. |
Ce returnează
True sau False.
Exemple
Exemplul 1: Legături spre același fișier
import os
open("a.txt", "w").close()
open("b.txt", "w").close()
os.link("a.txt", "a_dur.txt")
os.symlink("a.txt", "a_simbolic.txt")
print(os.path.samefile("a.txt", "a_dur.txt"), os.path.samefile("a.txt", "./a_simbolic.txt"))
print(os.path.samefile("a.txt", "b.txt"))
with open("a.txt") as f1, open("a_dur.txt") as f2:
print(os.path.sameopenfile(f1.fileno(), f2.fileno()))
print(os.path.samestat(os.stat("a.txt"), os.stat("a_simbolic.txt")))
Rezultat
True True
False
True
True
Greșeli frecvente
- Compari textul căilor ca să eviți copierea unui fișier peste el însuși. O legătură simbolică trece testul; folosește
samefile.
Comenzi înrudite
os.stat(), os.lstat() și os.fstat(): Toate informațiile despre un fișier: mărime, permisiuni, proprietar, date.Path.resolve(), absolute(), relative_to() și verificările de cale: Transformă căile în căi absolute sau relative și le compară.os.link(): Creează o legătură fizică (hard link): un al doilea nume pentru același fișier.